2009-07-07 15 views
4

Ich habe gelesen, dass Lucene eine interne Abfragesprache hat, wo man spezifiziert: und Sie machen Kombinationen von diesen mit booleschen Operatoren. ich alles über sie auf ihrer Website zu lesen und es funktioniert in LUKE ganz gut, kann ich Dinge wieWie verwende ich native Lucene-Abfragesyntax?

field1:value1 AND field2:value2 

und es wird scheinbar korrekte Ergebnisse zurück.

Mein Problem ist, wie übermittele ich diese Lucene Abfrage in die API? Ich habe QueryParser gesehen, aber ich muss ein Feld angeben. Bedeutet das, dass ich meine Eingabezeichenfolge, Felder, Werte, Klammern usw. noch manuell analysieren muss, oder gibt es eine Möglichkeit, die ganze Sache zu füttern und Lucene es zu tun?

Ich benutze Lucene.NET, aber da es eine Methode nach Methode Port des Orignal Java ist, wird jeder Rat geschätzt.

Antwort

2

Fragen Sie, ob Sie Ihren Benutzer zwingen müssen, das Feld zu betreten? Wenn dies der Fall ist, hat der Abfrageparser ein Standardfeld. Hier ist ein wenig more info. Solange Sie ein Standardfeld haben, das den Job erledigt, müssen sie keine Felder angeben. Wenn Sie fragen, wie Sie ein Query Objekt von String erhalten, benötigen Sie die parse Methode. Es versteht Felder und das zuvor erwähnte Standardfeld. Sie müssen nur sicherstellen, dass der Abfrageparser und der Indexersteller die gleiche Analyse verwenden.

+0

Oh, also das Feld, das Sie angeben, ist nur ein Standardfeld für den Fall, dass keiner angegeben ist? – Matt

+2

Wenn ein Benutzer nach "rot weiß blau" suchte, durchsucht die Abfrage, die aus der Syntaxanalyse stammt, das Standardfeld. Wenn stattdessen nach "title: red title: white title: blue" gesucht wird, würde die Abfrage nur auf das Titelfeld des Indexes schauen. –

+0

Also ja (ich glaube, ich habe deinen Kommentar zuerst falsch interpretiert). –