相关度评分 _score 的目的
是为了将当前查询的结果进行排序,比较不同查询结果的相关度评分没有太大意义。
_score的计算方式
score(q,d) = # score(q,d) 是文档 d 与查询 q 的相关度评分。
· queryNorm(q) # 查询归一化因子,用来使查询结果之间能够相互比较,但意义不大,因为_score的目的并不是对不同查询进行比较,而是用来对查询结果进行排序
· coord(q,d) # 协调因子,对于多词查询,文档里出现的匹配词越多,该值越大。 bool查询也遵循这个规则。Lucene中同义词查询会自动禁用这个值(优秀!)。
· ∑ (
· tf(t in d)
· idf(t)²
· t.getBoost()
· norm(t,d)
) (t in q)
优化查询结果的方法
- 设置boost参数在一个查询上、某些索引上
- 使用查询结构修改相关度
- 使用boosting查询,对包含不想要的词的查询结果进行降级
- function_score查询:这个查询可以使两个效果融合:可以仍然根据全文相关度进行排序,但也会同时考虑最新发布文档、流行文档、或接近用户希望价格的产品。
3.1 field_value_factor:需要有一个专门的字段,存储数值,以这个数值进行调试
3.2 functions:可以用来对不同搜索词加权
3.3