如何根据 ElasticSearch 中的条件提升字段

How to Boost a field based on condition in ElasticSearch

我的查询结构类似于

{
  "sort": {},
  "query": {
    "bool": {
      "should": [
        {
          "match_phrase": {
            "user_categories": "Grant Writing"
          }
        },
        {
          "match_phrase": {
            "user_agencies": "Census"
          }
        },
        {
          "match_phrase": {
            "user_agencies": "MDA"
          }
        },
        {
          "match_phrase": {
            "user_agencies": "OSD"
          }
        }
      ]
    }
  },
  "size": 500,
  "from": 0
}

假设这将 return 一个包含 10 个用户的列表。

我需要得到的是,具有 Agency: 'Census' 的用户成为搜索结果中的第一个(提升以 Census 作为代理的结果) .我们该怎么做?

下面会做的。我将一些 match_phrase 查询转换为 match 查询,因为它们只包含单个术语

{
  "sort": {},
  "query": {
    "bool": {
      "should": [
        {
          "match_phrase": {
            "user_categories": "Grant Writing"
          }
        },
        {  
          "match": {
            "user_agencies": { 
              "query": "Census",
              "boost": 3
            }
          }
        },
        {
          "match": {
            "user_agencies": {
              "query": "MDA",
          }
        },
        {
          "match": {
            "user_agencies": {
              "query": "OSD",
          }
        }
      ]
    }
  },
  "size": 500,
  "from": 0
}

你应该提升 at query time,并在代理字段中用 "Census" 大大提升文档。如果提升足够高,匹配 "Census" 的文档将始终位于最前面,而不管其他字段的值如何。

{
  "sort": {},
  "query": {
    "bool": {
      "should": [
        {
          "match_phrase": {
            "user_categories": "Grant Writing"
          }
        },
        {
          "match_phrase": {
            "user_agencies": "Census", "boost": 10

          }
        },
        {
          "match_phrase": {
            "user_agencies": "MDA"
          }
        },
        {
          "match_phrase": {
            "user_agencies": "OSD"
          }
        }
      ]
    }
  },
  "size": 500,
  "from": 0
}