Elasticsearch 按术语值的顺序排序

Elasticsearch sort by terms values' order

我正在将我的推荐服务与产品服务联系起来。推荐服务,无论参数是什么,总是returns一个按照相关性排序的产品ID列表。示例:

["ID1", "ID2", "ID3"]

产品服务拥有存储产品详细信息的 Elasticsearch 索引。客户需要推荐产品的数据以及相关性排序的产品详细信息。因此我正在使用这个搜索查询:

{
  "query":{
    "bool":{
      "filter":[
        {
          "terms": {
            "product_id": ["ID1", "ID2", "ID3"]
          }
        }
      ]
    }
  }
}

问题是该查询的结果未按术语值的顺序排序。我可以做出哪些改变来实现目标?

P.S.: Elasticsearch 索引设计、服务响应格式、推荐系统设计等方面的任何建议或参考都将受到欢迎。

terms 查询用作 OR 过滤器,以布尔方式对匹配项进行评分(true -> 1false -> 0)。

话虽如此,您可以通过 query_string 查询 boost the individual IDs 生成类似的 OR 查询,从而提高他们的分数,从而提高排序:

{
  "query":{
    "bool":{
      "should": [
        {
          "query_string": {
            "default_field": "product_id",
            "query": "ID1^3 OR ID2^2 OR ID3^1"
          }
        }
      ], 
      "filter":[
        {
          "terms": {
            "product_id": ["ID1", "ID2", "ID3"]
          }
        }
      ]
    }
  }
}

当然可以动态更改上述提升值,以适应 ID 列表的不同长度。