Elasticsearch 按 ID 数组查询返回的结果不是按传入的 id 数组排序的


elasticsearch query by array of id result returned is not sorted by the array of id pass in

我正在使用弹性体,下面是我的查询:

    $query = new Query();
    $query->setSize(5);
    $qb = new 'Elastica'Query'Ids();
    $qb->addId("id_5");
    $qb->addId("id_3");
    $qb->addId("id_4");
    $qb->addId("id_1");
    $qb->addId("id_2");
    return $query->setQuery($qb)

我希望结果返回的顺序与我传入的顺序相同,例如在这种情况下,它将是"id_5、id_3、id_4、id_1、id_2"

但是我得到的是排序与我想要的不一样

我认为这是两个解决方案1.如果您有ID作为文件的一部分,那么您可以做

POST indexName/_search
{
  "sort": [
    {
      "_script": {
        "type": "number",
        "script": "sortOrder.indexOf(doc['Id'].value)",
        "params": {
          "sortOrder": [
            "AVMX9sHTyNVr4SjF3oRt",
            "AVMTc1fSyNVr4SjF3WpF",
            "AVMYuGLOyNVr4SjF3rKm"
          ]
        },
        "order": "asc"
      }
    }
  ],
  "query": {
    "ids": {
      "values": [
        "AVMX9sHTyNVr4SjF3oRt",
            "AVMTc1fSyNVr4SjF3WpF",
            "AVMYuGLOyNVr4SjF3rKm"
      ]
    }
  }
}

如果没有,则需要将类型的映射更新为

{
  "mappings": {
    "YOUR_TYPE": {
      "_id": {
        "index": "not_analyzed"
      }
    }
  }
}

然后你可以使用"script":"sortOrder.indexOf(doc['_id'].value)"