keine Abfrage in Lucene

7

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

    
Ted Rogati 30.08.2010, 22:40
quelle

4 Antworten

16

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.

    
Jan Goyvaerts 24.08.2012 12:53
quelle
5

Überprüfen Sie die Antwort auf ähnliche Fragen . Die Lösung ist MatchAllDocsQuery .

>     
Shashikant Kore 31.08.2010 05:36
quelle
1

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, nach sweden 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.

    
adrianbanks 30.08.2010 22:59
quelle
1

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%     
Trinker 21.08.2016 08:29
quelle

Tags und Links