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

nhn9ugyo  于 2023-06-29  发布在  ElasticSearch
关注(0)|答案(1)|浏览(154)

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

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

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

8qgya5xd

8qgya5xd1#

我们可以使用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被放置在搜索结果的末尾。

这在当地进行了测试和验证。

相关问题