弹性搜索 - 按文档类型排序

时间:2015-01-29 10:33:40

标签: elasticsearch

我有一个包含2种不同文档类型的弹性搜索索引:'a''b'。我想按类型对结果进行排序,并优先考虑type='b'(即使它的得分较低)。我一直在客户端使用下面的搜索结果并对它们进行排序,但我已经意识到这种方法效果不好,因为我只检查前10个结果,通常不包含任何b。增加返回结果并不理想。我想通过弹性搜索来完成这项工作。

http://<server>:9200/my_index/_search?q=london

2 个答案:

答案 0 :(得分:4)

您需要使用function_score,并根据您对文档的评分方式,针对每种类型test some weight values, boost_modes and score_modes进行操作。例如:

GET /some_index/a,b/_search
{
  "query": {
    "function_score": {
      "query": {
        # your query here
      },
      "functions": [
        {
          "filter": {
            "type": {
              "value": "b"
            }
          },
          "weight": 3
        },
        {
          "filter": {
            "type": {
              "value": "a"
            }
          },
          "weight": 1
        }
      ],
      "score_mode": "first",
      "boost_mode": "multiply"
    }
  }
}

答案 1 :(得分:-1)

它为我工作。你将在命令提示符下执行以下命令。

curl -XGET localhost:9200/index_v1,index_v2/_search?pretty -d @boost.json

boost.json {

"indices_boost" : {
    "index_v2" : 1.4,
    "index_v1" : 1.3

}

}