3

私は Solr Suggester コンポーネントを使用していますが、fqパラメーターで結果をフィルタリングできるかどうか疑問に思っていました。次のようなクエリがあります。

http://localhost:8982/solr/core1/suggest?q=shirts&fq=category_id%3A321&wt=json&indent=true&spellcheck=true&spellcheck.build=true

ここで、私はいくつかの提案を得ようとしますq=shirts。これを でフィルタリングしてfq=category_id:321、他のカテゴリからの提案を受けないようにしたい。のカテゴリには にcategory_id:321関連する商品がないshirtsため、候補は返されません。しかし、そうです。そして、その提案を検索しようとすると、「元の」検索がfq=...パラメーターでフィルター処理されるため、何も見つかりません。

collateここhttp://wiki.apache.org/solr/SpellCheckComponent#spellcheck.collat​​eで何かを見つけました。私の結果を照合しますが、の提案も返しますshirts

したがって、私の質問は、Suggester (または基本的に SpellCheckerComponent) が fq パラメーターを認識しているかどうか、およびこのパラメーターを使用して提案 (または後の段階でスペル修正) をフィルター処理する方法です。

編集

「通常の」スペルチェックコンポーネント(たとえば、クラスsolr.IndexBasedSpellCheckerなど)が実際にfqパラメーターを考慮に入れていることがわかりました。設定できます

   <str name="spellcheck.collate">true</str>
   <str name="spellcheck.collateExtendedResults">false</str>

shitrまた、キーワードが存在しない特定のカテゴリ ID でフィルタリングする場合、候補は返されshirtません。

なぜこれが提案コンポーネントで機能しないのか疑問に思っています。何か案は?

4

1 に答える 1

1

私はそうは思いません。その理由を理解するには、これを少し違った見方をする必要があります。すでにご存知かもしれませんが、SpellChecker は、config で指定したフィールドから構築された辞書に基づいて動作します。

デフォルトテキスト solr.DirectSolrSpellChecker ...

そして、インデックス作成中に辞書を構成する必要があるコピーフィールドは、「テキスト」フィールドを埋めて辞書になります。例 :

この時点で、スペル チェッカーは候補がどこから来たのかわかりません。

したがって、照合を使用すると、少しうまくいく可能性があります。 &spellcheck=true&spellcheck.extendedResults=true&spellcheck.collat​​e=true を試しましたか? これにより、提案が何らかの結果をもたらすことが保証されます。

spellcheck.extendedResults は、インデックス内の頻度 (ヒット) など、提案に関する追加情報を提供します。これは、ロジックに役立つ場合があります。

于 2013-12-10T15:01:34.873 に答える