Im Allgemeinen ist jeder Analysator in Lucene ein Tokenizer + Stemmer + Stoppwortfilter.
Der Tokenizer teilt Ihren Text in Blöcke auf. Da verschiedene Analysatoren möglicherweise unterschiedliche Tokenizer verwenden, können Sie verschiedene Ausgabe- Token-Streams abrufen , dh Sequenzen von Textblöcken. Sie haben beispielsweise KeywordAnalyzer
erwähnt, dass der Text überhaupt nicht aufgeteilt wird und das gesamte Feld als einzelnes Token verwendet wird. Gleichzeitig verwenden StandardAnalyzer
(und die meisten anderen Analysatoren) Leerzeichen und Interpunktion als Teilungspunkte. Zum Beispiel wird für die Phrase "Ich bin sehr glücklich" die Liste ["i", "bin", "sehr", "glücklich"] (oder so ähnlich) erstellt. Weitere Informationen zu bestimmten Analysatoren / Tokenisierern finden Sie in den Java-Dokumenten .
Stemmers werden verwendet, um die Basis eines fraglichen Wortes zu erhalten. Dies hängt stark von der verwendeten Sprache ab. Zum Beispiel wird für die vorherige englische Phrase etwas wie ["i", "be", "veri", "happi"] produziert und für das französische "Je suis très heureux" eine Art französischer Analysator (wie SnowballAnalyzer
initialisiert) mit "Französisch") wird ["je", "être", "tre", "heur"] produzieren. Wenn Sie den Analysator einer Sprache verwenden, um Text in einer anderen Sprache zu speichern, werden natürlich Regeln aus der anderen Sprache verwendet, und der Stemmer kann zu falschen Ergebnissen führen. Es ist nicht das ganze System fehlerhaft, aber die Suchergebnisse sind dann möglicherweise weniger genau.
KeywordAnalyzer
verwendet keine Stemmers, es übergibt das gesamte Feld unverändert. Wenn Sie also einige Wörter im englischen Text suchen möchten, ist es keine gute Idee, diesen Analysator zu verwenden.
Stoppwörter sind die häufigsten und fast nutzlosesten Wörter. Auch hier kommt es stark auf die Sprache an. Für Englisch sind diese Wörter "a", "the", "I", "be", "have" usw. Stoppwortfilter entfernen sie aus dem Token-Stream, um das Rauschen in den Suchergebnissen zu verringern, also schließlich unsere Phrase "I. bin sehr glücklich "mit StandardAnalyzer
wird in Liste [" veri "," happi "] umgewandelt.
Und macht KeywordAnalyzer
wieder nichts. Wird KeywordAnalyzer
also für Dinge wie ID oder Telefonnummern verwendet, aber nicht für üblichen Text.
Und was Ihre maxClauseCount
Ausnahme betrifft, ich glaube, Sie bekommen es bei der Suche. In diesem Fall liegt es höchstwahrscheinlich an einer zu komplexen Suchabfrage. Versuchen Sie, es auf mehrere Abfragen aufzuteilen, oder verwenden Sie Funktionen auf niedrigerer Ebene.