2014-09-02 175 views
0
我有一些问题的查询

,我有一个嵌套的文件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 
             ) 

           ) 

         ) 

       ) 

     ) 

) 

当我运行与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>'; 
的标准查询

我得到一个结果。但是,当我更改查询参数来搜索富

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

任何想法,为什么嵌套查询是打破一个例外?

回答

3

如果使用默认映射,data字段已动态映射到object(文档here)类型。

因此,在您的object的子属性查询,你应该使用点符号这样的:

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