如何从同一列中具有不同值的弹性搜索中获取结果?

时间:2019-04-15 10:54:18

标签: php elasticsearch

我正在使用使用PHP的REST API通过以下代码从Elastic搜索中获取数据

$params = [
    'index' => $search_index,
    'type' => $search_type,
    'from' => $_POST["from"],
    'size' => $_POST["fetch"],
    'body' => [
        'query' => [
            'bool' => [
                'must' => [
                    [ 'match' => [ 'is_validated' => false ] ],
                    [ 'query_string' => [ 'query' => $search_str, 'default_operator' => 'OR' ] ] 
                    ]
                ]
            ]
        ]
    ];

现在,它运行良好,给了我想要的结果。

从ES返回的数据具有一列“ result_source”,并且具有CNN,BBC或YouTube等预定义的值。

我需要的是,我想以“我只能使用所需的选项来获取结果”的方式过滤“ result_source”列上的结果。就像我想要只具有“ result_source”值的结果“ YouTube”或“ BBC&CNN”或“ CNN或YouTube”等一样。

我已经尝试过“应该”选项,但是它还会返回数据以及其他不需要的值。在从ES提取结果时,不确定如何跳过“ result_source”列的值。

对此将有任何帮助。

谢谢

1 个答案:

答案 0 :(得分:0)

解决了!

我正在回答自己的问题,因为我找到了解决方案。也许将来可以帮助别人。

如果有人在Elastic search的字段/列中寻找搜索的解决方案,这是可以做的。

[ 'query_string' => [ 'query' => $search_str.'(result_source:CNN OR result_source:BBC)', 'default_operator' => 'OR' ] ]

“ result_source”实际上是ES的字段/列名,在其上应用了过滤器以返回具有result_source = BBC或result_source = CNN的结果。

这实际上解决了我的问题。