elasticsearch 复合查询:bool&boosting

1. bool查询


复合过滤器,将多个查询条件,用一定的逻辑组合在一起
  • must:所有条件,用must组合在一起,表示And
  • must_not:将must_not中的条件,全部都不能匹配,标识Not
  • should:所有条件,用should组合在一起,标识Or
#测试--bool查询
POST /king_test_person/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "name": {
              "value": "王五"
            }
          }
        },
        {
          "term": {
            "nationality": {
              "value": "汉"
            }
          }
        }
      ],
      "must_not": [
        {
          "term": {
            "sex": {
              "value": "女"
            }
          }
        }
      ],
      "should": [
        {
          "match": {
            "address": "湖南"
          }
        },
        {
          "match": {
            "address": "湘潭市"
          }
        }
      ]
    }
  }
}

2. boosting查询


boosting查询可以影响查询后的score
  • positive:只有匹配上positive的查询内容,才会被返回到结果集
  • negative:如果匹配上positive并且匹配上negative,就可以降低文档的score
  • negative_boost:指定系数,必须 < 1.0
关于查询时,分数时如何计算的:
  • 搜索的关键字在文档中出现的频次越高,分数就越高
  • 指定文档内容越短,分数就越高
  • 在搜索时,指定的关键字也会被分词,这个被分词的内容,被分词库匹配的个数越多,分数越高
#测试--bool查询
POST /king_test_person/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "name": {
              "value": "王五"
            }
          }
        },
        {
          "term": {
            "nationality": {
              "value": "汉"
            }
          }
        }
      ],
      "must_not": [
        {
          "term": {
            "sex": {
              "value": "女"
            }
          }
        }
      ],
      "should": [
        {
          "match": {
            "address": "湖南"
          }
        },
        {
          "match": {
            "address": "湘潭市"
          }
        }
      ]
    }
  }
}
posted @ 2024-01-31 08:17  king_wq_庆  阅读(10)  评论(0编辑  收藏  举报