elasticsearch 如何根据Elastic Search查询中指定的id列表对结果进行优先级排序

fd3cxomn  于 2023-10-17  发布在  ElasticSearch
关注(0)|答案(1)|浏览(180)

简要说明:(ElasticSearch)
我有一组ID [12,32,44,32],我需要根据ID列表对记录进行优先级排序,这意味着我需要将具有上述列表中的一个ID的记录,其余记录应排列在优先级排序后的4个记录之后

{
  id:12
  .
  .
},
{
  id:32
  .
  .
},
{
  id:44
  .
  .
},
{
  id:32
  .
  .
},
{
  id:1
  .
  .
},
{
  id:2
  .
  .
},
...

敬请期待查询格式的答案或提高查询结果的方法!

pjngdqdw

pjngdqdw1#

我们可以使用SORT将脚本添加到现有的过滤器中,而无需向现有查询添加boost

"sort": [
    {
      "_script": {
        "type": "number",
        "script": {
          "source": "def Ids = [ '12','32','44','22']; def id = doc['id'].value; if (Ids.contains(id)) { return Ids.indexOf(id); } else { return Ids.length + 1; }",
          "lang": "painless"
        }
      }
    }
  ]
  • 在脚本逻辑内部,Ids变量被定义为要优先处理的ID数组。
  • 该脚本使用contains方法检查“id”字段值是否是指定的优先级ID之一。如果是,脚本将使用indexOf方法返回ID在Ids数组中的索引位置。如果没有找到,脚本返回Ids.length + 1。这确保了非优先级的ID被放置在搜索结果的末尾。

这是在当地测试和验证的。

相关问题