Lucene term query
In meiner Anwendung haben wir Angebote und jedes Angebot hat eine Zielgruppe, die können über mehrere Felder wie Geschlecht, Alter und Stadt. Für die gender-Teil a deal Ziel sein könnte MALE
FEMALE
oder BOTH
. Ich wollte finden sich Angebote, die entweder für Männer oder für beide.Ich habe die folgende Abfrage, aber es funktioniert nicht...
TermQuery maleQuery = new TermQuery(new Term("gender","MALE"));
TermQuery bothQuery = new TermQuery(new Term("gender","BOTH"));
BooleanQuery query = new BooleanQuery();
query.add(maleQuery,BooleanClause.Occur.SHOULD);
query.add(bothQuery,BooleanClause.Occur.SHOULD);
Bitte vorschlagen, wenn ich einige machen Fehler. Irgendwie scheint es zu spucken nur MALE
Angebote,und nicht BOTH
.
Ich bin mit der version 4.2.1
und Standard Analyzer
wie der analyzer.
- Was ist das Ergebnis der Suche nur
new TermQuery(new Term("gender","BOTH"))
? - es gibt mir die Elemente mit Geschlecht angegeben, wie die beiden... aber es ist sehr inkonsistent. In ähnlicher verschiedenen Abfrage -
new TermQuery(new Term("type","DEAL"))
es nicht geben mir die Elemente mittype=DEAL
. Die Indizierung der beiden Szenarien ist genau das gleiche.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mehrere Lösungen möglich sind:
Erklärung
Einer kurzen Erklärung der situation wäre:
Habe ich eine
StandardAnalyzer
für die Indizierung, die untere Fällen input-Token, so dass eine case insensitive Suche wäre eingetreten.Dann habe ich eine
QueryParser
konfiguriert, mit dem gleichen Analysator zu konstruieren, die eine query-Instanz für die Suche des Benutzers Abfrage auf front-end. Die Suche funktioniert, weil der parser arbeitet in übereinstimmung mit standard-analyzer unteren Gehäuse der Benutzer den Bedingungen und machte eine groß-und Kleinschreibung beachten.Dann brauchte ich, um die Suchergebnisse filtern, für die ich schrieb
TermQuery
s anstelle der Verwendung von Parsern, in denen ich aktivierte text, der war nicht indiziert, die Art und Weise, so dass die Suche fehlgeschlagen ist.Deine Abfrage scheint vollkommen gültig, ich würde etwas suchen, was anderes könnte das falsch sein (z.B. sind Sie nicht mit
LowerCaseFilter
fürMALE/BOTH/FEMALE
Bedingungen durch eine chance, wenn die Indizierung?).Möchten Sie vielleicht zu Lesen dieser Artikel auf, wie die Zusammenführung verschiedener Abfragen in einem einzigen
BooleanQuery
.StandardAnalyzer
sowohl für die Indexierung und Suche, die aufpassen sollen case-Sensitivität. Weitere folgende unterschiedliche Kurse für mich:new QueryParser(version,"gender",analyzer).parse("MALE BOTH");
Fall senstivity wäre kein Problem.StandardAnalyzer
untere Fällen alle Eingaben vor der Indizierung und TermQuery macht einencase sensitive
suchen. Wenn ich einen parser verwenden es wieder eine Abfrage erstellt, mit der Unterstützung eines übergebenen analyzer, die in meinem Fall istStandardAnalyzer
so es kümmert sich um den Fall insenstivity aber der Begriff query schlägt fehl, obwohl.