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

时间:2015-02-16 10:37:06

标签: 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
}

假设这将返回10个用户的列表。

我需要得到的是,代理商:'人口普查'的用户是搜索结果中的第一个(提升人口普查作为代理商的结果)。我们怎么做到这一点?

2 个答案:

答案 0 :(得分:3)

以下将会这样做。我将部分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
}

答案 1 :(得分:0)

你应该提升at query time,并通过"人口普查"提供大量文件。在代理领域。如果提升足够高,则匹配"人口普查"无论其他字段的值如何,它都将始终位于顶部。

{
  "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
}