作者回复: 可以看一下API的说明 https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-dis-max-query.html 看一下计算的几个步骤,最后写, If the tie_breaker value is greater than 0.0, all matching clauses count, but the clause with the highest score counts most. 这个参数默认是0,只算最佳字段上的,因为其他情况都乘0了:)。理解了过程,这样就不需要死记硬背0和1的区别了。
作者回复: 不是很明白你的问题。但是出现在这一节。我猜你的意思是: 用户的查询输入是“张三”。文档有很多字段,你希望名字字段中包含张三的内容出现在最前面。其他字段中包含张三的出现在相对后面。 思路如下,第一,这个情况下,每个字段应该属于竞争的关系。需要选择best_fields的方式。但是你期望其他的字段如果包含了张三,也要被命中,你可以通过设置tie_breaker,考虑进其他字段的算分。 另外,你还可以设置每个字段的booster数值进行调整。 tie_breaker和booster具体取值,你需要通过数据进行一些测试后给出合适的取值
作者回复: 当用户输入了单个字符串查询的时候,通常会遇到以下三种情形: 最佳字段(best match) 当搜索词语具体概念的时候,比如 “brown fox” ,词组比各自独立的单词更有意义。像 title 和 body 这样的字段,尽管它们之间是相关的,但同时又彼此相互竞争。文档在 相同字段 中包含的词越多越好,评分也来自于 最匹配字段 多数字段(most fields) 为了对相关度进行微调,常用的一个技术就是将相同的数据索引到不同的字段,它们各自具有独立的分析链。 主字段可能包括它们的词源、同义词以及 变音词 或口音词,被用来匹配尽可能多的文档。
作者回复: 关于 null,exists,你可以查看这篇文档 https://www.elastic.co/guide/cn/elasticsearch/guide/current/_dealing_with_null_values.html
作者回复: 提高搜索的相关度,一种方式采用经验。更多的是需要建立好监控。例如搜索用户的查询语句,查询结果他实际点击了哪一条?然后你需要结合这些数据,在对你的查询语句或者是索引方法不断的进行优化和测试。
作者回复: 按照算分,其他的只有张或者只有三的算分肯定没有 又有张又有三的高。 肯定排在后面