SolrのSnowBallporterFilterFactoryとワイルドカードパラメータ
-
28-09-2020 - |
質問
次のフィールドタイプを使用してSOLRを照会する問題があります。
<fieldType name="text_ci" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/>
<filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
</analyzer>
</fieldType>
.
索引付けと照会時に「SnowBallPorterFilterFactory」を適用します。
のようなものを索引付けした場合マウスのものと楽しい
それは次のように索引付けされます:
「Mouse」という単語が「SnowBallPorterFilterFacletory」に「マウス」に変わるように。私たちが望むものです。しかし、
を検索するときマウス*
「SnowBallPorterFilterFactory」を同様に適用していないようです。私は最後に*のために推測します。
私の質問は、「SnowBallPorterFilterFiltory」をワイルドカードについて知っている方法がありますか?
を照会するときマウス*
私は0の結果を得ません。
を問い合わせる場合
ムス*
レコードが戻ってきます。
または誰かがこのタイプのフィールドを照会/索引付けするためのより良い方法を提供することができますか?
感謝Dave
解決
他のタイプのLuceneクエリとは異なり、ワイルドカード、プレフィックス、およびファジィクエリはアナライザを通過しません。これは、ステム作成や縮小などの操作を実行するコンポーネントです。アナライザをスキップする理由は、「犬」を探していたら、「犬」が「犬」に染色したことがない場合、それは意図されたクエリではない「犬*」と一致したくないということです。 QueryParserがそれらを小文字にするため、これらのクエリは大文字と小文字が区別されません。この現象はSetLowerCaseExPandedTerms(Boolean)メソッド
を使用して変更できます。
あなたのSOLRソースを変更してうまくいったら solr-757 あなたが役に立つと思うかもしれないそれに添付されたパッチを持っています。私は源泉へのダイビングよりもこれを変える方法がわかりません。
より単純な考え方があるかもしれない:染色されていないコピーフィールドを持っているだけです。ユーザーはこれらのフィールドの両方を検索し、次にマウス*がステム以外のフィールドで一致します。
(実際には、実際にそのパッチを見ている、私はそれがあなたが望むものをすることはわかりません。しかし基本的にあなたは最初にステムにあなたのクエリハンドラを変更する必要があるだけです。)
他のヒント
最後にチェックします。ワイルドカードを使用すると、クエリアナライザは使用されません。そのため、LowerCaseFilterFactoryを使用しているので、あなたの用語は小文字で索引付けされており、ムームの検索は何も返しません。
ワイルドカードを使用しているときにやるべきことは、あなたの条件が索引付けされている方法にあなたのクエリを適応させることです(あなたのクエリアナライザーが何をする方法でも)。