【问题标题】:Elasticsearch -- sort documents according to a value from a nested objectElasticsearch——根据嵌套对象中的值对文档进行排序
【发布时间】:2019-07-10 12:59:39
【问题描述】:

弹性搜索:v7.2
应用:Laravel v5.7

这是我的 Elasticsearch 系列的延续,question

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

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

现在,我们的困境是,我们应该对这些文档进行排序,比方说,我能够从34 获取范围为csr.csr_story_value 的文档,但需要相应地对它们进行SORTdescasc 的方式。

这是我的代码:

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

样本输出(仍未排序):

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

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

    $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"
        ]
    ];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-29
      • 2012-03-21
      • 2021-06-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      • 2019-06-25
      相关资源
      最近更新 更多