修改数组字符串字段中的ElasticSearch得分?

时间:2016-10-26 12:17:44

标签: elasticsearch

我正在使用elasticSearch 2.2 whith索引我无法轻易更改映射,我希望根据关键字做一些搜索请求。

这里是我的字符串数组字段“keywords”的映射:

"keywords": {
            "type": "string",
            "norms": {
              "enabled": false
            },
            "analyzer": "analyzer_keyword"
 "analyzer_keyword": {
              "filter": "lowercase",
              "tokenizer": "keyword"
            }

我想使用bool请求查询它,例如POST:

{
    "query": 
    {

     "bool" : {
        "should" : 
        [
            {
              "term": 
              {
                "keywords": "foo bar",
              }
            },
            {
              "term": 
              {
                "keywords": "baz",
              }
            },
            {
              "term": 
              {
                "keywords": "qux",
              }
            }
        ]

    }


  },
  "highlight": {
    "fields" : {
        "keywords" : {}
    }
  }
}

我希望得到的最佳匹配得分是包含最多关键字的匹配。

我希望此请求按分数排序的匹配示例:

  1. {id:#x,keywords:[“foo bar”,“baz”]}
  2. {id:#z,keywords:[“foo bar”,“qux”]}
  3. {id:#y,keywords:[“qux”]}
  4. {id:#w,keywords:[“baz”]}
  5. 但我有一些这样的结果:

    1. {id:#x,keywords:[“foo bar”,“baz”]}
    2. {id:#y,keywords:[“qux”]}
    3. {id:#z,keywords:[“foo bar”,“qux”]}
    4. {id:#w,keywords:[“baz”]}
    5. 你有什么想法可以帮助我管理吗?

      抱歉我的英文不好,谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

结果按其分数排序,这些分数取决于许多标准,包括分片中匹配术语的频率。但你不在乎,你想要条件的所有条款得分相同,你可以使用的是:

GET /test/test/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "constant_score": {
            "query": {
              "term": {
                "keywords": "foo bar"
              }
            }
          }
        },
        {
          "constant_score": {
            "query": {
              "term": {
                "keywords": "qux"
              }
            }
          }
        },
        {
          "constant_score": {
            "query": {
              "term": {
                "keywords": "baz"
              }
            }
          }
        }
      ]
    }
  }
}