我正在使用弹性体,下面是我的查询:
$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)"