2010-09-15 2 views

Antwort

8

A Query kann auf ein Searcher weitergegeben werden, um Dokumente zu finden, zu löschen versuchen. A Filter kann nicht; es kann nur die Ergebnisse ändern, die von einem Query erzeugt werden.

einen neuen Query Typ Implementierung ist ziemlich kompliziert und erfordert ein Verständnis der Beziehung von Lucene Einbauten wie Weight, Scorer und Similarity. Eine Filter Implementierung könnte ziemlich einfach sein und überhaupt nicht mit der interagieren.

+0

Obwohl das, was Sie sagen, im Prinzip richtig ist, können Filter in Searchers auch weitergegeben werden, aber sie arbeiten separat auf Abfragen – Khash

+0

@Khash Ich bin mir nicht sicher, was du meinst. Wenn Sie sagen, dass 'Filter'-Instanzen an einen' Searcher' (oder jetzt nur 'IndexSearcher') übergeben werden können, stimmt das, aber nur zusammen mit einer 'Abfrage' oder einem anderen Suchkriterium. Sie arbeiten nicht alleine. – erickson

17

Filter wirkt sich nicht auf die Berechnung des Ergebnisses der nicht gefilterten Dokumente aus.

Zum Beispiel stellen Sie sich die folgenden Dokumente:

1. 
loc: "uk", "london" 
text: "i live in london, "london is the best" 

2. 
loc: "london avenue", "london street", "london" 
text: "I like the shop in london st." 

jetzt lassen Sie uns sagen, dass Sie die folgende Abfrage tun:

q=+loc:"london" +text:"london" 

in dieser Abfrage die Punktzahl von doc 2 ist höher als die von doc 1 (

: weil loc ist in dem Dokument score)

unter Verwendung eines Filters berechnet

in dieser Abfrage die Punktzahl von doc 1 ist höher als die von doc 2.

Excuse die Solr Stil Formatierung aber die Gesamt Vorstellung ist klar.

Weitere Gründe für die Verwendung von Filtern sind Caching-Zwecke, Filter werden getrennt von Abfragen zwischengespeichert. Wenn Sie also eine dynamische Abfrage mit einem statischen Teil haben, ist es sinnvoll, nach dem statischen Teil zu filtern. Auf diese Weise ist der Indexdurchlauf auf die Teilmenge der gefilterten Dokumente beschränkt.

0

Nachdem Sie eine Datenbank geschlossen haben, verschwindet die Filterauswahl. Wenn Sie jedoch eine Abfrage schließen und erneut öffnen, ist sie weiterhin vorhanden.

Sie können auch eine Abfrage mithilfe eines Formulars erstellen. Sie können Filter in einem Formular jedoch nicht verwenden.

+3

Über welche Form sprichst du? Warum kann ein Filter nicht in einer solchen Form verwendet werden? – Dennis