弹性搜索-优先排序索引

时间:2018-10-23 15:10:10

标签: elasticsearch

假设我有三个指数:城市,博物馆和景点。

现在我正在查询所有索引(_all)的术语,例如“维也纳”

'query' :{
    'fuzzy' : {
        'name': 'vienna'
    }
}

结果是:

  1. 维也纳:维也纳美术馆(Museum)
  2. 维也纳:维也纳历史博物馆(Museum)
  3. 维也纳的里森拉德(Sight)
  4. 维也纳(cities)

有没有一种方法可以对索引进行优先排序,这样我就可以得到比景点和博物馆更重要的城市,比如:

  1. 维也纳(cities)
  2. 维也纳的里森拉德(Sight)
  3. 维也纳:维也纳美术馆(Museum)
  4. 维也纳:维也纳历史博物馆(Museum)

1 个答案:

答案 0 :(得分:0)

您可以通过按期望的顺序为每个索引添加增强来做到这一点:

{
  "query": {
    "bool": {
      "must": {
        "fuzzy": {
          "name": "vienna"
        }
      },
      "should": [
        {
          "term": {
            "_index": {
              "value": "cities",
              "boost": 3
            }
          }
        },
        {
          "term": {
            "_index": {
              "value": "sights",
              "boost": 2
            }
          }
        },
        {
          "term": {
            "_index": {
              "value": "museums",
              "boost": 1
            }
          }
        }
      ]
    }
  }
}