例如我有同义词 笔记本电脑,上网本,笔记本电脑 在index_synonyms.txt
中当用户搜索上网本时,我想提升原始文本,然后通过同义词进行扩展? 有没有办法在SynonymFilterFactory中指定它? 例如,使用原始术语两次,以便他的TF更大
答案 0 :(得分:8)
据我所知,现有的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>