Ich brauche keine Abfragen auf meinem Lucene-Index. Lucene erlaubt derzeit nicht nur, wenn wir zwei oder mehr Terme in der Abfrage haben:
So kann ich etwas tun wie:
%Vor%, aber ich kann keine Abfrage ausführen wie:
%Vor%Bitte lassen Sie mich wissen, ob es eine effiziente Lösung für dieses Problem gibt
Danke
Eine sehr späte Antwort, aber es könnte später für jemand anderen nützlich sein:
%Vor%Wenn ich mich nicht irre, sollte dies ein logisches "UND" mit allen Dokumenten und Dokumenten mit einem anderen Land als "Schweden" machen.
Überprüfen Sie die Antwort auf ähnliche Fragen . Die Lösung ist MatchAllDocsQuery .
>Die kurze Antwort ist, dass dies mit dem Standard Lucene nicht möglich ist.
Lucene erlaubt NOT
queries nicht als einen einzigen Begriff aus dem gleichen Grund, weil es keine Präfixabfragen erlaubt - um beides zu tun, müsste die Engine jedes Dokument durchsehen, um festzustellen, ob das Dokument ein Treffer ist / ist . Es muss jedes Dokument durchsehen, da es den Suchbegriff nicht als Schlüssel zum Nachschlagen von Dokumenten im invertierten Index (zum Speichern der indizierten Dokumente) verwenden kann.
Um Ihren Fall als Beispiel zu nehmen:
Um nach
not sweden
zu suchen, wäre der einfachste (und möglicherweise effizienteste) Ansatz, nachsweden
zu suchen und dann die Ergebnismenge zu invertieren, um alle Dokumente zurückzugeben, die nicht in dieser Ergebnismenge enthalten sind. Dies würde es erforderlich machen, alle erforderlichen Dokumente (dh nicht in der Ergebnismenge) im Index zu finden, aber ohne einen Schlüssel, um sie nachzuschlagen. Dies würde durch Iteration über die Dokumente im Index erfolgen - eine Aufgabe, für die sie nicht optimiert ist, und daher würde die Geschwindigkeit darunter leiden.
Wenn Sie diese Funktionalität wirklich benötigen, können Sie bei der Indizierung eine eigene Liste mit Elementen erstellen, sodass eine not sweden
-Suche zu einer sweden
-Suche wird, die Lucene verwendet, gefolgt von einer Inversion der Ergebnisse mithilfe Ihrer Objektgruppe.
OK, ich sehe, was Sie versuchen zu tun.
Sie können es als Abfrageverfeinerung verwenden, da es in Lucene keine unären booleschen Operatoren gibt. Trotz der obigen Antworten glaube ich, dass dies ein besserer und fortschrittlichster Ansatz ist ( beachte den Platz vor dem Platzhalter ):
%Vor%