Closed chtake closed 10 years ago
Hierführ müssen wir die API des KeyWordSearchService
ein wenig anpassen:
Suchvorschläge lösen ja erst bei 3+ eingegeben Zeichen aus, aber der Nutzer könnte auch in Wort mit nur zwei Zeichen, wie 'ad' suchen. Zudem ist es auch möglich, das bei großen Latenzen der Nutzer schneller ein komplettes und korrektes Schlüsselwort getippt hat, als das die Ajax-Anfragen für Vervollständigungen mithalten. Daher kann das Ajax-Frontend mit den bisherigen Infos vom Backend nicht entscheiden, ob ein 'ad' an sich eine vollständiges Stichwort darstellt oder ob es durch das erste Ergebnis in der Vorschlagsliste zu ersetzten ist.
Wir ändern wohl am besten die Parameterliste von List<? extends IDictionaryEntry> getMatches(String keyword, Language language)
zu List<? extends IDictionaryEntry> getMatches(String keywordCandidate, Optional<String> completionAlternative, Language language)
und bei der Anfrage wird, sofern eine Vervollständigungsliste angezeigt wurde, Optional.of(firstCompletionInList)
für die completionAlternative
mit an den Aufruf übergeben, sonst Optional.absent()
. Dann kann das Backend nachsehen, ob completionAlternative
tatsächlich ein vorhandenes Stichwort ist, und liefert dann die Treffer für diese getippt Nutzereingabe, andernfalls liefert es ggf. die Treffer für completionAlternative.get()
aus (in der Annahme, dass der Nutzer mit dem obersten Vorschlag zufrieden war).
@chillSen @andywer
@andywer @chillSen
Im commit 648d6d0709b5b65ad9b44573044c59658016e383 im Branch issues/35 ist nun eine weitere AjaxController action und eine entsprechende Route vorhanden, um das vor zwei Wochen gewünschte Verhalten bei Enter im Stichwortfeld zu ermöglichen.
Eine Ajax-Anfrage an /ajax/keyword/matches_with_alternative/latin/ad/adiantum
liefert Treffer für "ad", da dies ein kurzes, tatsächlich existierendes lat. Wort ist.
Eine Ajax-Anfrage an /ajax/keyword/matches_with_alternative/latin/ady/adiantum
liefert Treffer für "adiantum", da ein "ady" kein lat. Wort ist, die Alternative "adiantum" aber schon.
Eine Ajax-Anfrage an /ajax/keyword/matches_with_alternative/latin/ady/adlerauge
liefert keine Treffer, da weder "ady" noch die Ausweichmöglichkeit "adlerauge" lat. Wörter sind.
Wird der letzte (optionale) Parameter weggelassen (z.B. /ajax/keyword/matches_with_alternative/latin/adus
), verhält sich die action wie das ursprüngliche '/ajax/keyword/matches/latin/adus'.
@andywer @chillSen
Es musste noch ein kleiner Fix durch einen fehlerhaften Merge in dem issue branch, b93a66ffdd88d91e930e14adb223c84d21b4ebe4 funktioniert jetzt (zumindest bei mir).
Erledigt, aber noch nicht in den master-Branch gemergt.
Gibt der Benutzer ein unvollständiges Stichwort ein und die Stichwort-Vorschlag Liste ist geöffnet, soll beim Absenden der Suche das 1. Wort aus der Liste verwendet werden.
@chillSen @andywer