запрос 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
                                        )

                                )

                        )

                )

        )

)

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

$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
}

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


person user2988129    schedule 02.09.2014    source источник


Ответы (1)


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

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

{
  "query": {
    "match": {
      "data.foo": "28865"
    }
  }  
}
person ThomasC    schedule 02.09.2014