如何让Solr搜索soul-control时仅返回含该完整术语的文档?
解决Solr检索带连字符术语的匹配问题
- 调整分词器的连字符处理逻辑
Solr默认的分词器(比如StandardTokenizer)会把连字符当成分隔符,把soul-control拆成soul和control两个词来检索。要让它把带连字符的术语当作完整单元,得修改字段的分词配置。
如果用的是StandardTokenizer,可以搭配WordDelimiterFilterFactory,通过参数关闭连字符的拆分行为:
<fieldType name="text_preserve_hyphen" class="solr.TextField"> <analyzer type="index"> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0" splitOnCaseChange="0" splitOnNumerics="0" preserveOriginal="1"/> </analyzer> <analyzer type="query"> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0" splitOnCaseChange="0" splitOnNumerics="0" preserveOriginal="1"/> </analyzer> </fieldType>
核心参数作用:
generateWordParts="0":禁止拆分出单个词汇片段(比如不把soul-control拆成soul和control)preserveOriginal="1":保留带连字符的原始词汇作为独立分词单元绑定字段到新的字段类型
把存储目标术语的字段,指定为上面定义的text_preserve_hyphen类型:
<field name="your_field_name" type="text_preserve_hyphen" indexed="true" stored="true"/>
替换your_field_name为你实际存储文档内容的字段名(比如content)。
- 重新索引文档
修改完配置后重启Solr,然后重新索引所有相关文档,确保新的分词规则应用到已存储的内容上。
做完这些,直接搜索soul-control时,Solr就会将其作为完整检索词匹配,只会返回包含该完整术语的文档,不用再加引号。
内容的提问来源于stack exchange,提问作者ScottD
相关产品推荐
相关产品推荐

