2017-01-25 4 views
1

Ich versuche, ArangoDB zu verwenden, um eine Volltextabfrage nach Namen zu machen, und ich würde gerne in der Lage sein, nach anfänglichen, z. Suche nach "John J. Doe" oder "J. Doe" würde beide John James Doe zurückgeben. Ich setze den Index minLength: 1 und ich versuche, das prefix Tag für die Suche zu verwenden, z. "prefix:J,Doe". Dies macht die Suche leider unbrauchbar langsam (5 Sekunden für eine einzige Suche über 1,6 Millionen Datensätze). Sollte dies schneller funktionieren oder ist es das erwartete Verhalten mit prefix: Abfragen der Länge 1?Volltextabfragen mit Präfix

Antwort

0

ArangoDB verwendet den ICU-Tokenizer, um Wörter an ihren Grenzen zu teilen. Sie können ihre Arbeit in arangosh mit dem SYS_SPLIT_WORDS_ICU Befehl inpsect:

SYS_SPLIT_WORDS_ICU() 
usage: SplitWordlist(<value>, minLength, [<maxLength>, [<lowerCase>]]) 

Also für Ihre Ihrem Fall können Sie versuchen, zu:

SYS_SPLIT_WORDS_ICU('John J. Doe', 1) 
[ 
    "John", 
    " ", 
    "J", 
    ".", 
    " ", 
    "Doe" 
] 

was wahrscheinlich die Ursache für die hohe CPU-Auslastung ist. Eine Mindestlänge von 3 scheint ein guter Kompromiss zu sein. Wenn Sie bestimmte Funktionen benötigen, müssen Sie in Ihrer Anwendung ein spezielles Suchfeld vorbereiten, das Ihren Text für den Index vorbereitet.