Solrで解析されたクエリが一貫性がない
(The bot translated the original post https://lists.apache.org/thread/73gxb4ngpkch87cs3psqsxdvbcfp1hdo into Japanese and reposted it under Apache License 2.0. The copyright of posted content is held by the original poster.)
こんにちは、
私はedismaxパーサーを使用しており、デフォルトのqf
は field1
と field2
です。クエリ q=hello world
でデバッグモードにすると、次のようなクエリが生成されていることがわかります。
parsedquery_toString: "+((((field1:hello) | (field2:hello)) ((field1:world) | (field2:world)))~2) ()",
しかし、別の検索クエリ q=hello universe
の場合、
parsedquery_toString: "+(+((+field1:hello +field1:universe) | (+field2:hello +field2:universe)))"
最初のクエリは期待される動作です。これは大多数のクエリの動作であり、2番目の解析クエリにはいくつかの例外があります。この2番目のクエリはより制限が厳しく、両方の用語を1つのフィールド内で見つけることを強制しますが、最初のクエリは、1つのフィールドに最初の用語があり、別のフィールドに2番目の用語があるドキュメントを見つけます。また、スコアの計算にも違いがあります: MAXのSUM対SUMのMAXです。
この問題は4.3.1バージョンでは発生せず、最初に3年前の8.4.1(solrcloud)で経験し、現在9.0.0でも再度発生しています。
2つの回避策を見つけました:
q=hello AND universe
を使用する、ただしq.op=AND
を設定する。defType=dismax
を使用する。
どちらの解決策でも、最初の解析クエリが使用されます。
私たちは、これがHunSpellFilterに関連していると考えました。なぜなら、用語の1つに同義語があり(解析されたクエリには同義語も含まれている)、一部の単語ではトリガーされていますが、すべての同義語にはトリガーされていないためです。別の例としては、カスタムタイプのフィールド内での一致がありますが、一般的なルールはありません。多くのフィールドは、クエリ内の qf
値で特定のフィールドを除外することで修正されていますが、これらのフィールドには特別なものはなく、異なる検索で同じフィールドではありません。
時々2番目の解析クエリを使用するトリガーについて説明してもらえますか?これはSolrのバグですか?
よろしくお願いします、
Imre Papuscan
トピックへ返信するには、ログインが必要です。