1、query-time boost 查询的时候设置query的boost. 增加权重

2、重构查询结构.如should中嵌套bool。

3、negative boost 包含了negative term的doc,分数乘以negative boost,分数降低

4、constant_score 如果你压根儿不需要相关度评分,直接走constant_score加filter,所有的doc分数都是1,没有评分的概念了

1、query-time boost

GET /forum/article/_search
  "query": {
    "bool": {
      "should": [
          "match": {
            "title": {
              "query": "java spark",
              "boost": 2
          "match": {
            "content": "java spark"

2、重构查询结构

重构查询结果,在es新版本中,影响越来越小了。一般情况下,没什么必要的话,大家不用也行。

GET /forum/article/_search 
  "query": {
    "bool": {
      "should": [
          "match": {
            "content": "java"  1/3
          "match": {
            "content": "spark"  1/3
          "bool": {
            "should": [
                "match": {
                  "content": "solution"  1/6
                "match": {
                  "content": "beginner"  1/6

3、negative boost

搜索包含java,不包含spark的doc,但是这样子很死板

搜索包含java,尽量不包含spark的doc,如果包含了spark,不会说排除掉这个doc,而是说将这个doc的分数降低

包含了negative term的doc,分数乘以negative boost,分数降低

GET /forum/article/_search 
  "query": {
    "bool": {
      "must": [
          "match": {
            "content": "java"
      "must_not": [
          "match": {
            "content": "spark"
GET /forum/article/_search 
  "query": {
    "boosting": {
      "positive": {
        "match": {
          "content": "java"
      "negative": {
        "match": {
          "content": "spark"
      "negative_boost": 0.2

negative的doc,会乘以negative_boost,降低分数

4、constant_score

如果你压根儿不需要相关度评分,直接走constant_score加filter,所有的doc分数都是1,也可以加上boost指定一个固定的分数,比如0,就是纯不计算积分,也就没有评分的概念了

GET /forum/article/_search 
  "query": {
    "bool": {
      "should": [
          "constant_score": {
              "boost": 0,
            "filter": {
              "match": {
                "title": "java"
          "constant_score": {
              "boost": 0,
            "filter": {
              "match": {
                "title": "spark"

1. 在搜索中,我们有这样一种需求,期望搜索的结果中包含java 如果标题中包含hadoop或spark就优先搜索出来,同时呢,如果一个帖子包含java hadoop,一个帖子包含java spark,包含hadoop的帖子要比spark优先搜索出来

对于这样的需求,通俗来讲,就是需要通过增大某些搜索条件的权重,从而在搜索的结果中,更多符合和满足我们业务场景的数据靠前搜索出来,在es中可以通过boost关键词来增加搜索条件的权重,

GET /forum/article/_search
	"query": {
		"bool": {
			"must": [{
				"match": {
					"title": "java"
			"should": [{
				"match": {
					"title": {
						"query": "hadoop"
				"match": {
					"title": {
						"query": "spark",
						"boost": 2
				"match": {
					"title": {
						"query": "php"
				"match": {
					"title": {
						"query": "hadoop",
						"boost": 5

参考:elasticsearch中四种常见的相关度分数优化方法 - PHP面试网

1. 相关度评分算法的组成 对于Elasticsearch而言,相关度评分的计算规则通过三部分组成: boolean model,TF/IDF,Vector space model。这三个部分没有所谓的权重,它们是平等的,计算时逐层推进。 1.1 boolean model boolean model是相关度分数计算的第一步操作。 Elasticsearch搜索时,首先根据搜索条件,过滤出符合条件的document,此时Elasticsearch不会做任何的相关度分数计算,仅仅只记录true或false,标 在本文我们将深入研究四种特殊的查询类型:Boosting Query、Constant Score Query、Dis Max Query和Function Score Query的特性、参数说明以及使用示例。 Elasticsearch 会为 query 的每个文档计算一个相关度得分 score ,并默认按照 score 从高到低的顺序返回搜索结果。 在很多场景下,我们不仅需要搜索到匹配的结果,还需要能够按照某种方式对搜索结果重新打分排序。例如:Function score query 就可以让我们实现对最终 score 的自定义打分。为了方便,下面把 ES 对 匹配的文档进行打分得到的 score 记为 ,而最终搜索结果的 score 记为 ,显然,一般情况下(也就是不使用自定义打分时), 就是 。那么 相关度评分背后的理论 Lucene(或 Elasticsearch)使用 布尔模型(Boolean model) 查找匹配文档,并用一个名为 实用评分函数(practical scoring function) 的公式来计算相关度。这个公式借鉴了 频/逆向文档频率(term frequency/inverse document frequency) 和 向量空间模型(vector s... relevance score(相关性分数) 算法,简单来说,就是计算出,一个索引的文本,与搜索文本,他们之间的关联匹配程度。Elasticsearch使用的是 term frequency/inverse document frequency算法,简称为TF/IDF算法。TF频(Term Frequency),IDF逆向文件频率(Inverse Document Frequency)搜索文本的各个条在field文本出现了多少次,出现次数越多,就越相关。数学公司并不重要,看下面例子就清楚了。 ES相关度分数评分算法分析, ES 实现相关度分析底层原理 使用 boolean模型,TFIDF,VSM空间向量模型计算相关度,使用 boost, negativeboost 来增加,削弱 查询条件权重进行分数调优 本文章收录于【Elasticsearch系列】,将详细的讲解 Elasticsearch 整个大体系,包括但不限于ELK讲解、ES调优、海量数据处理等本文大纲一、filter执行原理深度... 一、关于elasticsearch7.8的搜索方式与实景应用(上) ​ 本文是在elasticsearch7.8的环境下操作的,最近也很忙没时间去整理,终于肝了一篇出来。关于ES,接触的很早,了解他却很迟,有种相恨见晚的感觉,最近在项目上又一次碰见了它,不由得再来感叹一遍。 1、问题初始 1.1、应用场景: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T6oWimxM-1608017669710)(C:\Users\Jay\AppData\Roaming\Typora\t   复合查询包装其他复合或叶子查询,以组合其结果和分数,更改其行为,或从查询切换到筛选器上下文。 1.1、constantScoreQuery   包含另一个查询但在过滤器上下文执行的查询。所有匹配的文档都给出相同的“常量”_score。 1.2、boolQuery【最常用】   用于组合多个叶子或复合查询子句的默认查询,包含must,should,must_n... 本文将帮助您深入了解ElasticSearch。 我们将审查可满足典型项目至少95%需求的主要功能。 如果您是ElasticSearch的新手,在本文您将找到几乎所有在使用新数据库之前应提出的问题的答案。什么是ElasticSearchElasticsearch是一个全文搜索引擎,用于存储无模式的JSON文档。 Elasticsearch是基于Apache Lucene的开源软件,并根据Apa... analyzer 指定分器。elasticsearch是一款支持全文检索的分布式存储系统,对于text类型的字段,首先会使用分器进行分,然后将分后的根一个一个存储在倒排索引,后续查询主要是针对根的搜索。 analyzer该参数可以在每个查询、每个字段、每个索引使用,其优先级如下(越靠前越优先): 1、字段上定义...