Ich glaube nicht, dass es Unterstützung für AND
Syntax in der komplexen Phrase Abfrage Parser gibt. OR
s verwenden Sie eine SpanOr
. Es gibt kein Äquivalent SpanAnd
in Lucene.
Auch wenn ein SpanAnd
existiert, habe ich das Gefühl, es könnte etwas anderes bedeuten, als Sie erwarten. Ein OR wird verwendet, um das eine oder das andere an der gleichen Position zu entsprechen. Das heißt, (A OR B) C
stimmt mit "A C" und "B C" überein. Also müsste dieser theoretische SpanAnd (A AND B) C
sowohl A als auch B an der gleichen Position haben, kurz vor C. Es ist möglich, dass zwei Terme den gleichen Platz im Index belegen (mit Stemmern, Synonymfiltern usw.), aber es ist normalerweise nicht besonders interessant, um direkt zu suchen.
Um das zu erreichen, was Sie suchen, benutzen Sie mit so etwas wie gehen müssen: "a b d"~1000 "c d"~1000
Ausdruck dieser Abfrage, wie Sie es geschrieben haben, ist (grob) möglich durch die Lucene SpanQuery API:
SpanQuery abQuery = new SpanNearQuery(new SpanQuery[] {
new SpanTermQuery(new Term("field", "a")),
new SpanTermQuery(new Term("field", "b"))
}, 1000, true);
SpanQuery cQuery = new SpanTermQuery(new Term("field", "c"));
SpanQuery abcQuery = new SpanOrQuery(new SpanQuery[] {
abQuery,
cQuery
});
Query finalQuery = new SpanNearQuery(new SpanQuery[] {
abcQuery,
new SpanTermQuery(new Term("field", "d"))
}, 1000, true);
TopDocs docs = searcher.search(finalQuery, 10);
Ich glaube nicht, dass der ComplexPhrase-Parser dazu in der Lage ist. Das betrifft verschachtelte SpanNears, die der Parser meiner Meinung nach nicht unterstützt.
Haben Sie Dokumente gesehen, die diese Art von Syntax ("UND" und "ODER" in einer komplexen Phrase) unterstützt? Ich glaube nicht, dass ich es getan habe. – femtoRgon
@femtoRgon Es ist keine Dokumentation, aber ich sah dies [Blog-Post] (http://yonik.com/solr-4-8-features/) und etwas offizieller finden Sie [hier] (https: // cwiki. apache.org/confluence/display/solr/Other+Parsers#OtherParsers-ComplexPhraseQueryParser). Der erste Satz ist _The ComplexPhraseQParser bietet Unterstützung für Wildcards, ORs usw. in Phrasenabfragen mit Lucenes ComplexPhraseQueryParser_. – ashual