我使用solr,结果得分有麻烦。例如 我有这样一个带有一个字段的文档(例如“内容”):
然后使用此类参数“ :{ “ mm”:“ 1”, “ q”:“汽车”, “ tie”:“ 0.1”, “ defType”:“ dismax”, “ fl”:“ *,得分”,}
我希望看到这样的结果:
没有“ s”的词应该更高,但是我有奇怪的事情。我如何提高绝对匹配度(例如汽车)
答案 0 :(得分:3)
之所以会这样,是因为您用于该字段的字段类型附加了词干过滤器(或ngramfilter)(这使得cars
和car
彼此产生匹配。)您不能在这样的字段内增加“精确匹配”,因为对于Lucene来说,它们具有相同的值。 car
和cars
的索引中存储的内容相同-后者也被处理到car
。
要实现此目的并获得更高的准确匹配率,请添加第二个字段,但不提供该过滤器,该过滤器仅将您的内容标记(分割)在空白上并小写标记。这样,您将有一个字段,其中cars
和car
存储为不同的令牌,并且如果令牌不匹配,令牌将不会对得分有所贡献。
您可以在Solr中使用qf
来告诉Solr您要搜索哪些字段,并且可以同时提高搜索效率-因此,在您的情况下,您会在qf=exact_field^10 text_field
命中exact_field
中的值将比常规字段中的命中值高十倍(确切的提升值将取决于您的用例以及查询配置文件的行为方式。)
您还可以使用不同的增强参数(bq
和boost
)在常规查询之外应用增强(例如,向bq
添加查询以复制原始查询),但先前的建议可能会很好。