neradis / index-vivus

student project to present lexical knowledge from XML-transcriptions of dictionaries in an interactive web interface for easier lookup and explorative search
0 stars 0 forks source link

[Frontend] Stichwortsuche: Bei unvollständigem Stichwort erstes aus Liste verwenden. #35

Closed chtake closed 10 years ago

chtake commented 10 years ago

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

neradis commented 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

neradis commented 10 years ago

@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'.

neradis commented 10 years ago

@andywer @chillSen

Es musste noch ein kleiner Fix durch einen fehlerhaften Merge in dem issue branch, b93a66ffdd88d91e930e14adb223c84d21b4ebe4 funktioniert jetzt (zumindest bei mir).

andywer commented 10 years ago

Erledigt, aber noch nicht in den master-Branch gemergt.