たとえば、index_synonyms.txt に同義語のラップトップ、ネットブック、ノートブックがあります。
ユーザーがネットブックを検索するとき、元のテキストを同義語で拡張するよりも強化したいですか? SynonymFilterFactory でこれを指定する方法はありますか? たとえば、元の用語を 2 回使用すると、彼の TF が大きくなります
たとえば、index_synonyms.txt に同義語のラップトップ、ネットブック、ノートブックがあります。
ユーザーがネットブックを検索するとき、元のテキストを同義語で拡張するよりも強化したいですか? SynonymFilterFactory でこれを指定する方法はありますか? たとえば、元の用語を 2 回使用すると、彼の TF が大きくなります
私の知る限り、既存の SynonymFilterFactory でこれを行う方法はありません。しかし、以下は、この動作を得るために使用できるトリックです。
あなたのフィールドが と呼ばれているとしましょうtitle
。これのコピーである別のフィールドを作成しますtitle_synonyms
。ここで、SynonymFilterFactory が のみのアナライザーとして使用されていることを確認しtitle_synonyms
ます (2 つのフィールドに異なるフィールド タイプを使用することでこれを行うことができます — たとえばtext
とtext_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>