Solr 8.7で複数の値を使用している際のFq解析エラー

トピック作成者:ks-solruserml-bot (2024/06/04 22:47 投稿)
3
CloseClose

(The bot translated the original post https://lists.apache.org/thread/sxfnjqp325k1v8jy4h9pr5fgl05vdfc6 into Japanese and reposted it under Apache License 2.0. The copyright of posted content is held by the original poster.)

こんにちは、

私たちのシステムで使用しているフィルタクエリは "fq=negativeattribute:(citychennai%20citydelhi)" です。Solr 6.5では正常に動作していました。Solr 6.5では、このクエリは以下のように解析されました。

<arr name="parsed_filter_queries">
  <str>negativeattribute:citychennai negativeattribute:citydelhi</str>
</arr>

しかし、Solrを8.7にアップグレードした後、このクエリが正常に動作しなくなりました。Solr 8.7では、このクエリは以下のように解析されます。

"parsed_filter_queries": [
  "negativeattribute:citychennai citydelhi",
]

negattributeフィールドのスキーマは以下の通りです。

<fieldType name="negattribute" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.TrimFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.TrimFilterFactory"/>
  </analyzer>
</fieldType>

さらに、この問題はstring型のフィールドのみで正常に動作しています。この場合、fqフィールドが括弧内のすべての値に適用されます。

返信投稿者:ks-solruserml-bot (2024/06/04 22:48 投稿)

「sow」クエリパラメータ(ホワイトスペースで分割する)は、デフォルトでfalseになっています。これは意図的なものです。あなたの分析チェーンは入力をトークンに分割しないため、値はそのまま受け入れられ、スペースも含まれます。

現在はクエリ解析定義が分割を行うことが期待されており、クエリパーサーではありません。

リクエストやハンドラ定義に「sow=true」を追加すると、期待する動作が復元されます。しかし、もし本当にこのフィールドがスペースを含むすべての文字の完全一致であることを意図しているなら、それはおそらく最善の方法ではありません。次のようにfqを変更すれば、正常に動作します:

fq=negativeattribute:(citychennai OR citydelhi)

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

返信投稿者:ks-solruserml-bot (2024/06/04 22:48 投稿)

こんにちは、Shawn。

ありがとう、私もsowパラメータに疑念を持っていました。しかし、分析済みタイプと未分析タイプでなぜ動作が異なるのか分かりません。

例えば、このクエリをSolr 8.7に与えた場合、

fq=negativeattribute:(citychennai mcat43120 20mcat43120)&debug=query&fq=mcatid:(43120 26527 43015)

それは以下のように両方のクエリを解析します。mcatidフィールドではsowがtrueのように動作しています。

"parsed_filter_queries": [ "negativeattribute:citychennai mcat43120 20mcat43120", "mcatid:43120 mcatid:26527 mcatid:43015" ]

negattributeフィールドのスキーマ

<fieldType name="negattribute" class="solr.TextField" positionIncrementGap="100"> 
  <analyzer type="index"> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.TrimFilterFactory"/> 
  </analyzer> 
  <analyzer type="query"> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.TrimFilterFactory"/> 
  </analyzer> 
</fieldType>

mcatidフィールドのスキーマ

<fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>

よろしくお願いします。

返信投稿者:ks-solruserml-bot (2024/06/04 22:48 投稿)

これはとても奇妙です。私はデフォルトの例の設定から構築したインデックスで8.9.0で同じ現象を再現しました。

"filter_queries":["id:(foo bar baz)"],
"parsed_filter_queries":["id:foo id:bar id:baz"],

これはバグのように見えますが、クエリパーサーに関してもっと経験のある人が意見を述べる必要があります。また、別の方法でも試しましたが、同じ結果が得られました:

"filter_queries":["{!edismax}id:(foo bar baz)"],
"parsed_filter_queries":["+(id:foo id:bar id:baz)"],

私はidフィールド(これはmcatidフィールドのようにStrFieldとして設定されています)での解析チェックから、おそらくクエリパーサーがここで分割を行っていることを確認できます。なぜStrFieldとキーワードトークナイザーを持つTextFieldで異なる動作をするのかは分かりません。同じことがqパラメータでも起こります。

ありがとう、
Shawn

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

KandaSearch

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

投稿の削除

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