May I suggest the convention from code hinting.
User distingues the auto-completed portion of the search via highlighting.
As user types:
Richard
Rochelle
Robert
(user sees the desired outcome)
At this point user may choose to search 'Rob' by either pressing < enter > or clicking < search >. Or accept the autocomplete by pressing < right arrow > or < tab >.
Robert (user pressed < right arrow > now highlighting has been removed indicating acceptance of the autocomplete)
User may now seach 'Robert' by pressing < enter > or clicking < search >.
(sub suggestion) If user hangs on the search field for too long (5 seconds?), activate a tool tip describing the keyboard controls.
Alternatively:
- Hit < Tab > or < right arrow > to accept autocomplete -> hit enter to search (user > autocomplete, assume user is correct) *my pref
- Hit < enter > to accept autocomplete or Hit < space > or < tab > to reject -> hit enter (a second time) to search (user = autocomplete, assume neither)
- Hit tab or space to reject auto complete -> Hit enter to accept and search, or just search (user < autocomplete, assume autocomplete is correct)
<1> has the advantage of assuming the user, so mistakenly using autocomplete is not an issue. Running the search without explicitly accepting auto complete will run the users key strokes only. The disadvantage is that some users will not understand how to use the autocomplete when they want to.
<2> has the advantage of agnotisim regarding user keystokes and autocomplete, user must specify with action regardless. Major disadvantage is that this method means using the search will ALWAYS have an extra click or keystroke, as there is no default.
<3> has the advantage of assuming the autocomplete, making autocomplete easy to use for all. But this is also a disadvantage, as users who do not wish to use autocomplete now have an extra keystroke to get around the feature.
IMHO: 2. is bad, simply because it persistently demands and additional action on the part of the user. And 3. is bad because it is overly aggressive with the autocomplete, meaning that it could get in the way of user intent rather than assisting it. So we are left with 1.
One final option to consider is the use of timers. If user hangs without a keystroke for a moment, that may also be a good place to trigger an acceptance of autocomplete.