Запрос упругого поиска по массиву возвращаемого результата не сортируется по массиву прохода в
Я использую эластик и ниже мой запрос:
$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 ответ
Решение
Я вижу это как два решения 1. Если у вас есть идентификатор как часть документа, то вы можете сделать
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)"