0

Elasticsearch:v7.2
应用:Laravel v5.7

这是我的 Elasticsearch 系列与这个问题的延续。

由于从 MySql 迁移到 Elasticsearch,我们以前的数据库表需要JOINED从另一个表生成结果。当我们将数据库表转换为 Elasticsearcherch Indexes 时,我们将应有的JOINED结果转换为NESTED索引中的对象

我们现在能够从nested对象中获取具有正确参数的特定文档,例如:在我们的web索引中查找具有csr字段的csr.csr_story_value文档3

现在,我们的困境是,我们应该对这些文档进行排序,比方说,我能够获取范围为csr.csr_story_valuefrom 3to的文档,4但需要以and方式SORT相应地获取它们。descasc

这是我的代码:

$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 嵌套对象排序的某些内容或任何查询?

示例输出(仍未排序):

在此处输入图像描述

4

1 回答 1

0

经过一系列的反复试验,我应该刚刚删除了range查询并添加modeavg. 我现在的工作查询:

$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"
    ]
];
于 2019-07-10T04:59:39.723 回答