Wir haben einige Tests mit Lucene.Net 3.0.3 in Bezug auf Suchen und Einfügen durchgeführt.Lucene Suchleistung - DOC vs DEFAULT Sortierung
Für die Tests verwendeten wir einen Keyword-Analyzer und Textgenerator basierend auf echten englischen Wörtern.
Wenn der Index bei der Suche nach 1000 zufälligen Sätzen ungefähr 8 Millionen Dokumente erreicht, dauert es 25 Minuten, bis die Suche abgeschlossen ist. (Standard-Sortierung)
Wenn wir die Suche ändern Sortierung zu dokumentieren:
searcher.Search(query, null, int.MaxValue, new Sort(new SortField(null, SortField.DOC, true))); // boolean query
Die Suche dauert nur wenige Sekunden.
Was gibt? Ist die Standardsortierung auf Relevanz basiert? Warum hat es so große Auswirkungen?
Wenn wir die Anzahl der Treffer von int.MaxValue auf 50 reduzieren, wird auch die Suche auf einige Sekunden reduziert.
Nimmt nur die ersten 50 Treffer im Index und ignoriert den Rest?
In diesem speziellen Fall indexiere ich den vollständigen Text mit dem Schlüsselwort analyzer in einem Feld und mit dem Standardanalyseprogramm in einem anderen Feld. Wenn die eingehende Suche zu 100% genau sein muss, suche ich nach dem spezifischen Feld, das vom Keyword-Analyzer indiziert wird. Wie würden Sie diesen Fall angehen? –
@pelican_george - Was meinst du mit 100% genau? Wenn Sie meinen, dass die Abfrage mit dem * gesamten Text * des Feldes übereinstimmen muss, ist eine Keyword-Analyse sinnvoll. Wenn Sie meinen, dass die Abfrage genau mit einem Teil des Feldes übereinstimmen muss (wenn Sie in Ihrer aktuellen Abfrage Platzhalter verwenden müssen), wäre eine PhraseQuery mein erster Gedanke. Andere Ansätze zur Analyse könnten ebenfalls nützlich sein. – femtoRgon
Ich meine, die Abfrage muss mit dem gesamten Text des Feldes übereinstimmen. Danke für die Eingabe. –