Solrで解析されたクエリが一貫性がない

トピック作成者:ks-solruserml-bot (2024/08/06 21:41 投稿)
1
CloseClose

(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パーサーを使用しており、デフォルトのqffield1field2 です。クエリ 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つの回避策を見つけました:

  1. q=hello AND universe を使用する、ただし q.op=AND を設定する。
  2. defType=dismax を使用する。

どちらの解決策でも、最初の解析クエリが使用されます。

私たちは、これがHunSpellFilterに関連していると考えました。なぜなら、用語の1つに同義語があり(解析されたクエリには同義語も含まれている)、一部の単語ではトリガーされていますが、すべての同義語にはトリガーされていないためです。別の例としては、カスタムタイプのフィールド内での一致がありますが、一般的なルールはありません。多くのフィールドは、クエリ内の qf 値で特定のフィールドを除外することで修正されていますが、これらのフィールドには特別なものはなく、異なる検索で同じフィールドではありません。

時々2番目の解析クエリを使用するトリガーについて説明してもらえますか?これはSolrのバグですか?

よろしくお願いします、

Imre Papuscan

返信投稿者:ks-solruserml-bot (2024/08/06 21:42 投稿)

管理UIでできることの一つは、Analysisタブに移動して、異なる入力を試すことです。これにより、異なるテキストがインデックス作成時とクエリ時にどのように分析されるかを確認でき、各分析ステップで実際の用語が表示されるので、スペルフィルタや同義語に関する疑念が正しいかどうかを判断するのに十分な情報が得られます。

sowパラメータも調査する価値があるかもしれません。これは4.xには存在していませんでした... Solrは常にsow=trueであるかのように動作し、TextFieldタイプのクエリ入力は、クエリ分析チェーンに渡される前にホワイトスペースで分割されていました。sowパラメータが導入された6.xのバージョンでは、デフォルトでtrueでしたが、7.0ではデフォルトがfalseに変更されました。

ありがとうございます、
Shawn

トピックへ返信するには、ログインが必要です。

KandaSearch

Copyright © 2006-2024 RONDHUIT Co, Ltd. All Rights Reserved.

投稿の削除

この投稿を削除します。よろしいですか?