1

EdgeNGramFilterFactory を使用して solr ワイルドカード検索の実装に取り​​組んでいます。フロント/バック検索を実装しようとしています。たとえば、「フォーマット システム」と「システム フォーマット」を検索して同じ結果を返します。フロントとバックに EdgeNGramFilterFactory を設定しましたが、フロントの「フォーマット システム」検索のみが機能しており、バックの「システム フォーマット」では機能していません。

これが私の構成です

<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
            <analyzer>
                <tokenizer class="solr.StandardTokenizerFactory" />
                <filter class="solr.LowerCaseFilterFactory" />
                <filter class="solr.StopFilterFactory" words="stopwords_en.txt" ignoreCase="true" />
                <!-- <filter class="solr.SnowballPorterFilterFactory" language="English" /> -->
                <filter class="EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front" />
                <filter class="EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="back" />
            </analyzer>
</fieldType>
4

1 に答える 1

2

あなたが言及した例は、用語が含まれており、用語を検索するときにワイルドカードを必要としないため、それほど適合しません。たとえばsysのように用語の部分を検索する場合は、NGramsを作成することをお勧めします。アナライザーチェーンの結果を確認するには、Solr分析ページを確認することをお勧めします。

EdgeNGramFilterFactoryで構成されside="front"、入力として単語システムを使用すると、次の用語が生成されます。

sy sys syst syste system

このようにして、最初にインデックスを作成した用語がシステムであったとしても、sysまたはsysteを検索して結果を取得できます。

EdgeNGramFilterFactoryで構成されside="back"、入力として単語システムを使用すると、次の用語が生成されます。

em tem stem ystem system

このようにして、temまたはystemを検索し、結果を得ることができます。

それらを同じチェーンにまとめると、最初のアナライザーによって生成された各項で2番目のアナライザーが機能します。あなたは基本的に各フロントNGramからバックNGramを作成していますが、これは私が推測するものではありません。

最初に要件を明確にすることをお勧めします。それでも前後にNGramを生成する場合は、2つの異なるフィールド内で生成する必要があります。次にedismax、たとえばパーサーを使用して両方を検索できます。

于 2012-06-21T07:00:16.607 に答える