我正在使用名称搜索,由于某种原因,当我查询包含“samara”,“samir”或“samuel”之类的子字符串的“sam”文档时,它们的权重似乎相等。
这仅仅是Solr的内置功能,可以将包含您的搜索词的单词解析为子字符串吗?在继续选择之前,是否有办法对确切的查询本身施加更大的权重?
我已经有两个单独的fieldTypes
来对原始文本进行加权,而不是对其进行同义词处理,但是我无法解决这种子字符串问题,因为它似乎是Solr固有的。
这是我的fieldType定义:
<fieldType class="solr.TextField" name="fullTextName" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
任何帮助将非常感激。
最佳答案
在Solr中有可能:
1)您定义2个字段类型:fullTextName和fullTextNameExact
它们之间的区别是索引时间分析,特别是您希望确切的字段类型不具有边缘Ngram token 过滤器。
2)您创建2个字段,每种类型一个
3)您定义一个使用Dismax查询解析器或edismax查询解析器的请求处理程序。[1]
4)要使用的一个请求参数是“qf”,此参数允许您表达要参与搜索的不同字段,并以不同的提升对其加权。
在您的情况下,您可以使用:
<str name="qf">fullTextNameExact^3 fullTextName</str>
这将增强更精确的匹配结果,但仍允许自动补全。
[1] https://cwiki.apache.org/confluence/display/solr/The+Extended+DisMax+Query+Parser
关于apache - 如何在solr中而不是将结果包含为子字符串的结果中加重精确的查询文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45225150/