OR演算子を使用しているときにsolrで近接クエリを作成することは可能ですか?例:
term1:"Samsung" term2:"galaxy note" OR "galaxy 3" OR ...
~n 近接した term1 と term2 の両方があるかどうかを調べる必要があります。
ここでの簡単なアプローチは、一連の長いフレーズ クエリを生成することです。そのため、"Samsung" と "galaxy note" を別々に検索するのではなく、それらを連結して、次のような結果を得ることができます。
"Samsung galaxy note" OR "Samsung galaxy 3" ...
必要な量のスロープを持つように設定します。
同様のケースを処理するComplexPhraseQueryParserを使用することもできますが 、フレーズ内の代替フレーズを処理するかどうかはわかりません。 SurroundQueryParserもこの種のことをサポートしますが、分析は行いません。つまり、事前にサブクエリを分析する必要があります (ドキュメントの制限セクションを参照してください)。
クエリを手動で生成したい場合は、一連の を使用して、より直接的にサポートできますSpanQuery
。これは次のようになります。
Query rootQuery = parser.parse("\"Samsung\"");
Query option1Query = parser.parse("\"galaxy note\"");
Query option2Query = parser.parse("\"galaxy 3\"");
Query option3Query = parser.parse("\"something else\"");
SpanQuery orQuery = new SpanOrQuery(
new SpanMultiTermQueryWrapper(option1Query),
new SpanMultiTermQueryWrapper(option2Query),
new SpanMultiTermQueryWrapper(option3Query)
);
SpanQuery finalQuery = new SpanNearQuery({new SpanMultiTermQueryWrapper(rootQuery), orQuery}, slop, true);
これは、現在最新バージョンである Solr 4.4 ではデフォルトでサポートされていません。
SOLR-1604には、いくつかの関連情報があります。