なぜ`edismax`はフィールドレベルのワイルドカードクエリを`*:*`にリセットするのですか?

トピック作成者:ks-solruserml-bot (2024/09/11 21:25 投稿)
4
OpenOpen

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

こんにちは、Solrユーザーの皆さん、

なぜedismaxクエリはフィールド存在クエリを*:*にリセットするのでしょうか?これは予想された動作でしょうか、それともバグでしょうか?

edismaxクエリ "q": "{!edismax qf=keywords v='*'}" または他の形式 "q=*&qf=keywords.en&defType=edismax" を使用していますが、これは keywords:* に変換されると予想していました。

パーサーデバッグクエリのレスポンスは以下の通りです:

"parsedquery": "+MatchAllDocsQuery(*:*)",
"parsedquery_toString": "+*:*",
"QParser": "ExtendedDismaxQParser",
返信投稿者:ks-solruserml-bot (2024/09/11 21:25 投稿)

私の記憶によれば、これは予想される動作です。クエリの値はパラメータvから来ており、qfはこの例では*に設定されているqfパラメータから来ています。そのため、q=*qf=keywords.enとなります。

--ありがとうございます
Vaijanath

返信投稿者:ks-solruserml-bot (2024/09/11 21:26 投稿)

こんにちは、Vaijanath。

qfはアスタリスクではなく、フィールド名「keywords」に設定されています。値がアスタリスクに設定されています。

"q": "{!edismax qf=keywords v='*'}"
返信投稿者:ks-solruserml-bot (2024/09/11 21:26 投稿)

これはパーサーの意図的な機能です。なぜなら、99%のケースでクエリ文字列に生のアスタリスク(明示的なフィールドなしで、または用語の接尾辞として使用)が含まれていると、人々は「すべてに一致する」と解釈するからです。

https://issues.apache.org/jira/browse/SOLR-2996

もしedismaxに「keywords:*」というクエリ文字列を与えた場合(keywordsがパーサー設定で許可されたユーザーフィールドであると)、それは「フィールド 'keywords' に何らかの用語が含まれる」というクエリとして扱われます。しかし、アスタリスクが生のものであるため、edismaxlucene qparserの両方は、qfdfパラメータに関係なく「すべてのドキュメントに一致する」クエリとして扱います。

-Hoss
http://www.lucidworks.com/

返信投稿者:ks-solruserml-bot (2024/09/11 21:26 投稿)

ありがとうございます、Hossさん。完璧な回答です。

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

KandaSearch

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

投稿の削除

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