11

たとえば、index_synonyms.txt に同義語のラップトップ、ネットブック、ノートブックがあります。

ユーザーがネットブックを検索するとき、元のテキストを同義語で拡張するよりも強化したいですか? SynonymFilterFactory でこれを指定する方法はありますか? たとえば、元の用語を 2 回使用すると、彼の TF が大きくなります

4

1 に答える 1

8

私の知る限り、既存の SynonymFilterFactory でこれを行う方法はありません。しかし、以下は、この動作を得るために使用できるトリックです。

あなたのフィールドが と呼ばれているとしましょうtitle。これのコピーである別のフィールドを作成しますtitle_synonyms。ここで、SynonymFilterFactory が のみのアナライザーとして使用されていることを確認しtitle_synonymsます (2 つのフィールドに異なるフィールド タイプを使用することでこれを行うことができます — たとえばtexttext_synonyms)。これらの両方のフィールドで検索しますが、よりも高いブーストを与えtitleますtitle_synonyms

以下に、フィールド タイプの定義の例を示します。

    <fieldType name="text" class="solr.TextField">
        <analyzer type="index">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
            <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
        </analyzer>
        <analyzer type="query">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
            <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
        </analyzer>
    </fieldType>

    <fieldType name="text_synonyms" class="solr.TextField">
        <analyzer type="index">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.SynonymFilterFactory" synonyms="synonyms_index.txt" ignoreCase="true" expand="true"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
            <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
        </analyzer>
        <analyzer type="query">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.SynonymFilterFactory" synonyms="synonyms_query.txt" ignoreCase="true" expand="true"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
            <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
        </analyzer>
    </fieldType>

サンプル フィールド定義は次のとおりです。

    <field name="title" type="text" stored="false"
           required="true" multiValued="true"/>
    <field name="title_synonyms" type="text_synonyms" stored="false"
           required="true" multiValued="true"/>

titleフィールドのコピー先title_synonyms:

<copyField source="title" dest="title_synonyms"/>

を使用している場合はdismax、次のようにこれらのフィールドにさまざまなブーストを与えることができます。

    <str name="qf">title^10 title_synonyms^1</str>
于 2012-05-19T05:25:03.380 に答える