2017-10-23 6 views
0

Ich muss herausfinden, ob meine BooleanQuery mindestens ein passendes Dokument hat. Die Gesamtzahl der übereinstimmenden Dokumente ist mir egal - nur dass es mindestens eine Übereinstimmung gibt. Zur Zeit verwende ich IndexSearcher.Search(...) mit n = 1, aber ich würde gerne wissen, ob es einen effizienteren Weg gibt.Wie kann man herausfinden, ob eine Lucene-Abfrage mindestens ein Ergebnis effizient hat?

Wenn ich n = 1 setze, wird TotalHits immer noch auf den richtigen Wert gesetzt (d. H. Es kann höher als 1 sein), also vermute ich, dass Lucene zusätzliche Arbeit leistet, die ich nicht brauche.

Gibt es einen besseren Weg, dies zu tun?

P.S. Ich benutze Lucene .NET 3.0.3.

Antwort

1

Lucene durchsucht nicht jedes Dokument, um die Anzahl der Treffer zu bestimmen. Es durchsucht den Index, der auf die übereinstimmenden Dokumente verweist. Denken Sie an ein Buch Index:

Cats . . . . . 5, 8, 9, 10 
Dogs . . . . . 5, 6, 11, 12 
Horses . . . . 5, 8, 12, 13, 14 

Wenn ich die Suche nach „Katzen und Pferden“, gibt es nicht wirklich einen signifikanten Unterschied in der Menge der Arbeit ist erforderlich, mir zu sagen „1 oder mehr Treffer“ vs " 2 Treffer ".


Soweit Kurzschluss in einem Booleschen Abfrage voll „sollte“ Klauseln, bin ich von jeder Abfrageklasse nicht bewusst, dass dies der Fall ist. Wenn Sie eine Abfrage wie field:simpleterm field:*slowwildcardquery* haben und die große langsame Platzhalterabfrage nicht auswerten möchten, wenn die einfache Termbuchabfrage übereinstimmt, sollten Sie sie einfach als separate Suche ausführen. Wenn der erste keine Treffer zurückgibt, dann führe den zweiten aus.

+0

danke für die Klärung! Ich bleibe bei meiner ursprünglichen Anfrage :) – HelloWorld

Verwandte Themen