Elasticsearch - сортировка документов по значению из вложенного объекта - PullRequest
0 голосов
/ 10 июля 2019

Elasticsearch: v7.2
Применение: Laravel v5.7

Это продолжение моей серии Elasticsearch с этим вопросом .

В результатепри переходе с MySql на Elasticsearch наши прежние таблицы базы данных должны выдавать JOINED результаты из других таблиц.Когда мы превратили нашу таблицу базы данных в индексы Elasticsearcch, мы преобразовали предполагаемые результаты JOINED в объект NESTED в наших индексах

Теперь мы можем получать конкретные документы с правильными параметрами изОбъект nested, такой как: поиск документов в нашем индексе web с полем csr, которое имеет csr.csr_story_value из 3

Теперь наша дилемма заключается в том, что мы должны отсортировать эти документыскажем, я смог получить документы с диапазоном csr.csr_story_value от 3 до 4, но мне нужно SORT их соответственно desc и asc способом.

Это мой код:

$temp = 
[
    "csr.csr_story_value" => [
        'order' => $order,
        'nested' => [
            'path' => 'csr',
            'filter' => [
                "bool" => [
                    "must" => [
                        [ 
                          "match" => [ 
                            "csr.cli_id" => $parseParams['client_media_xref---cli_id']
                          ] 
                        ],
                        [
                          "match" => [
                            "csr.kgp_id" => $parseParams['client_media_xref---kgp_id']
                          ]
                        ],
                        [ 
                          "range" => [
                            "csr.csr_story_value" => [
                              "gte" => (int)$parseParams['cmx_story_rank---csr_story_rank'],
                              "lt" => (int)($parseParams['cmx_story_rank---csr_story_rank'])
                            ]
                          ]
                        ]
                    ]
                ]
            ],
        ]
    ]
];

$params['body']['sort'] = $temp;

Проблема в том, что документы не были отсортированы.Я что-то пропускаю или какие-либо запросы для сортировки вложенных объектов Elasticsearch?

Пример вывода (все еще не отсортирован):

enter image description here

1 Ответ

0 голосов
/ 10 июля 2019

После серии проб и ошибок я должен был просто удалить запрос range и добавить mode из avg.Мой рабочий запрос сейчас:

$temp = 
[
    "csr.csr_story_value" => [
        'order' => $order,
        'nested' => [
            'path' => 'csr',
            'filter' => [
                "bool" => [
                    "must" => [
                        [ 
                          "match" => [ 
                            "csr.cli_id" => $parseParams['client_media_xref---cli_id']
                          ] 
                        ],
                        [
                          "match" => [
                            "csr.kgp_id" => (string)$parseParams['client_media_xref---kgp_id']
                          ]
                        ]
                    ]
                ]
            ]
        ],
        "mode" => "avg"
    ]
];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...