Запрос elasticsearch не работает с вложенным запросом с php

У меня возникли проблемы с запросом, у меня есть вложенный документ

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
 )

 )

 )

 )

 )

)

Когда я запускаю стандартный запрос с библиотекой phastics elasticsearch

$client = new Elasticsearch\Client();

$params['index'] = 'holiday';
$params['type'] = 'holiday';
$params['body']['query']['match']['phone'] = '166872';

$results = $client->search($params);

echo '<pre class="prettyprint linenums">' , print_r($results) , '
';

Я получаю результат. Но когда я меняю параметр запроса на поиск 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
}

Любые идеи, почему вложенный запрос ломается?

1 ответ

Если вы используете сопоставление по умолчанию, поле data было динамически сопоставлено с типом object (документация здесь).

Следовательно, чтобы запросить суб-свойство вашего object, вы должны использовать точечную нотацию следующим образом:

{
 "query": {
 "match": {
 "data.foo": "28865"
 }
 } 
}

licensed under cc by-sa 3.0 with attribution.