2016-03-21 7 views
0

Lassen Sie uns sagen, dass ich einen String-Wert „useridA; useridB, userdidC, useridA, useridA“ bin IndizierungLucene - Erwartetes Verhalten, wenn mehrere Vorkommen eines Tokens innerhalb eines Feldes Indizierung

Das Feld wird auf ANALYZED und Verwendungen ein benutzerdefinierter CharTokenizer, der nach einem Grenzkomma-Zeichen sucht. Was ist das erwartete Verhalten im Index, da das Token "useridA" mehrmals im selben Feld auftritt?

Wird nur derselbe Wert neu indiziert und derselbe Speicherplatz beibehalten, als wäre es nur ein einziger Vorgang gewesen?

Antwort

1

Auf der Basisebene ist Lucene ein "invertierter Term-Index", der Term-> DocID speichert. Wenn also ein Begriff mehrmals vorkommt, wird er nur einmal aufgezeichnet.

Offensichtlich ist dies eine große Vereinfachung. Positionsinformationen werden auch abhängig vom TermVector Wert gespeichert, der beim Hinzufügen des Felds verwendet wird (Sie benötigen dies für die Verwendung von Phrasen- und Slop-Abfragen).

Abhängig von Ihrem Anwendungsfall würde ich vorschlagen, dass Sie die Liste entweder beim Indexieren entfernen oder einfach einen HashSet < string> für diese Eigenschaft Ihrer Klasse verwenden.