複合フレーズクエリパーサーでAND
の構文がサポートされているとは思われません。 OR
はSpanOr
を使用します。 Luceneには同等のものはありませんSpanAnd
です。
SpanAnd
が存在しても、期待したものとは異なる意味になるかもしれません。 ORは、同じ位置にあると一致するために使用されます。。つまり、(A OR B) C
は「A C」と「B C」に一致します。したがって、この理論的なSpanAnd (A AND B) C
は、AとBの両方をCの直前で同じ位置に置かなければなりません。索引で同じスペースを占める2つの語を持つことは可能ですが(ステマ、シノニムフィルタなどで)、直接検索するのは特に興味深いことではありません。
はあなたのようなもので行く必要があるかもしれない、あなたが探しているものを達成するために:あなたが書いているよう
"a b d"~1000 "c d"~1000
このクエリを表現することである(おおよそ)可能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);
しかし、私はComplexPhraseパーサーがそれを表現する能力があるとは思いません。それはネストされたSpanNearsを含んでいます。パーサーがサポートしているとは思えません。
この種の構文(複雑なフレーズ内で「AND」と「OR」)がサポートされていることを示すドキュメントはありませんか?私は持っているとは思わない。 – femtoRgon
@femtoRgonこれはドキュメントではありませんが、私はこの[ブログ記事](http://yonik.com/solr-4-8-features/)ともっと公式な記事を見ました(ここではhttps:// cwiki。 apache.org/confluence/display/solr/Other+Parsers#OtherParsers-ComplexPhraseQueryParser)。最初の文は_ ComplexPhraseQParserはLuceneのComplexPhraseQueryParser_を使ってフレーズクエリ内でワイルドカード、ORなどをサポートしています。 – ashual