10
比如我有同義詞 筆記本電腦,上網本,筆記本 在index_synonyms.txt在使用Solr同義詞時,是否有辦法提高原始術語?
當上網本我想提高原文的同義詞更多然後擴大用戶搜索? 有沒有辦法在SynonymFilterFactory中指定它? 例如,使用原始術語兩次,所以他的TF將更大
比如我有同義詞 筆記本電腦,上網本,筆記本 在index_synonyms.txt在使用Solr同義詞時,是否有辦法提高原始術語?
當上網本我想提高原文的同義詞更多然後擴大用戶搜索? 有沒有辦法在SynonymFilterFactory中指定它? 例如,使用原始術語兩次,所以他的TF將更大
據我所知,現有的SynonymFilterFactory沒有辦法做到這一點。但以下是你可以用來獲得這種行爲的技巧。
假設您的字段名爲title
。創建另一個字段,即title_synonyms
。現在確保SynonymFilterFactory僅用作title_synonyms
的分析器(您可以通過對兩個字段使用不同的字段類型 - 例如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>
真的好主意!但在我的情況下,我有大約10個字段需要同義詞......所以如果沒有其他解決方法...... solr補丁等將會這樣做 – yura
如果您對所有這些字段使用相同的同義詞文件,則可以將所有他們到一個共同的同義詞領域 - 你不需要一個對應於每個領域的同義詞領域。 –
但我對所有的領域使用細粒重量。所以標題的同義詞比描述的同義詞更重要。 – yura