我遇到了一些查询问题,我有一个嵌套文档
Array
(
[took] => 2
[timed_out] =>
[_shards] => Array
(
[total] => 5
[successful] => 5
[failed] => 0
)
[hits] => Array
(
[total] => 1
[max_score] => 1
[hits] => Array
(
[0] => Array
(
[_index] => holiday
[_type] => holiday
[_id] => 31245
[_score] => 1
[_source] => Array
(
[username] => john thomas
[user] => 3
[info] => test
[phone] => 166872
[data] => Array
(
[foo] => 28865
[bar] => new test
)
)
)
)
)
)
当我使用elasticsearch php库运行标准查询时
$client = new Elasticsearch\Client();
$params['index'] = 'holiday';
$params['type'] = 'holiday';
$params['body']['query']['match']['phone'] = '166872';
$results = $client->search($params);
echo '<pre>' , print_r($results) , '</pre>';
我得到了一个结果。但是当我将查询参数更改为搜索foo
时$params['body']['query']['match']['data']['foo'] = '28865';
我被抛出异常
{
"error": "SearchPhaseExecutionException[Failed to execute phase [query], all shards failed;
shardFailures {[9J2ZatYTTV2Sk8LQFKFeXg][holiday][2]:
SearchParseException[[holiday][2]: from[-1],size[-1]:
Parse Failure [Failed to parse source [
{
"query": {
"match": {
"data": {
"foo": "28865"
}
}
}
}
]]];
nested: QueryParsingException[[holiday] [match] query does not support [foo]]; }{[9J2ZatYTTV2Sk8LQFKFeXg][holiday][3]:
SearchParseException[[holiday][3]: from[-1],size[-1]:
Parse Failure [Failed to parse source [
{
"query": {
"match": {
"data": {
"foo": "28865"
}
}
}
}
]]];
nested: QueryParsingException[[holiday] [match] query does not support [foo]]; }{[9J2ZatYTTV2Sk8LQFKFeXg][holiday][0]:
SearchParseException[[holiday][0]: from[-1],size[-1]:
Parse Failure [Failed to parse source [
{
"query": {
"match": {
"data": {
"foo": "28865"
}
}
}
}
]]];
nested: QueryParsingException[[holiday] [match] query does not support [foo]]; }{[9J2ZatYTTV2Sk8LQFKFeXg][holiday][1]:
SearchParseException[[holiday][1]: from[-1],size[-1]:
Parse Failure [Failed to parse source [
{
"query": {
"match": {
"data": {
"foo": "28865"
}
}
}
}
]]];
nested: QueryParsingException[[holiday] [match] query does not support [foo]]; }{[9J2ZatYTTV2Sk8LQFKFeXg][holiday][4]:
SearchParseException[[holiday][4]: from[-1],size[-1]:
Parse Failure [Failed to parse source [
{
"query": {
"match": {
"data": {
"foo": "28865"
}
}
}
}
]]];
nested: QueryParsingException[[holiday] [match] query does not support [foo]]; }]",
"status": 400
}
为什么嵌套查询会破坏?
答案 0 :(得分:3)
如果您使用默认映射,则data
字段已动态映射到object
类型(文档here)。
因此,要查询object
的子属性,您应该使用点符号,如下所示:
{
"query": {
"match": {
"data.foo": "28865"
}
}
}