使用PHP查询Elasticsearch

时间:2016-06-17 17:40:28

标签: php elasticsearch

我在将用于弹性搜索的一些查询转换为PHP可读查询时遇到了一些麻烦。

例如,这个简单的查询有效:

$query = $elastic->search([
body' => [
    'query' => [
        'match' => [
            'myfield' => 'mymatchingresult'
        ]
    ]
]
]);

但是我想要上班的内容如下。没有错误,它只是没有运行。我不能理解结构。相同的查询,如果置于像谷歌扩展意义的东西似乎工作。 (使用php' =>'转换为':'等。)

$query = $elastic->search([
'body' => [
    'query' => [
        'filtered' => [
            'query' => [
                'query_string' => [
                    'query' => '*',
                    'analyze_wildcard' => 'true'
                ]
            ],
            'filter' => [
                'bool' => [
                    'must' => [ 
                        'query' => [
                            'query_string' => [
                                'analyze_wildcard' => 'true',
                                'query' => 'cn:name'
                            ]
                        ],
                        'range' => [
                            '@timestamp' => [
                                'from' => '2012-05-01',
                                'to' => '2016-05-01'
                            ]
                        ]
                    ]
                ]
            ]
        ]
    ]
]
]);

谢谢你的帮助! -John

1 个答案:

答案 0 :(得分:0)

据我所知,bool/must过滤器中的约束必须用方括号括起来,即bool/must应该是纯数组,而不是关联数组。

像这样:

$query = $elastic->search([
'body' => [
    'query' => [
        'filtered' => [
            'query' => [
                'query_string' => [
                    'query' => '*',
                    'analyze_wildcard' => 'true'
                ]
            ],
            'filter' => [
                'bool' => [
                    'must' => [ 
                      [
                        'query' => [
                            'query_string' => [
                                'analyze_wildcard' => 'true',
                                'query' => 'cn:name'
                            ]
                        ]
                      ],
                      [
                        'range' => [
                            '@timestamp' => [
                                'from' => '2012-05-01',
                                'to' => '2016-05-01'
                            ]
                        ]
                      ]
                    ]
                ]
            ]
        ]
    ]
]
]);