2016-12-05 137 views
0

我对ElasticSearch中的query_string查询有疑问。我想创建索引中的所有类型和字段的全文搜索。字符串是否对嵌套对象执行query_string?例如,我有这个映射Elasticsearch嵌套对象query_string

{ 
    "my_index": { 
    "mappings": { 
     "my_type": { 
     "properties": { 
      "group": { 
      "type": "string" 
      }, 
      "user": { 
      "type": "nested", 
      "properties": { 
       "first": { 
       "type": "string" 
       }, 
       "last": { 
       "type": "string" 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
} 

和查询

GET /my_index/_search 
{ 
    "query": { 
     "query_string" : { 
      "query" : "paul" 
     } 
    } 

} 

所以,当我打电话查询,将ES跨越包括嵌套或仅在my_type对象和嵌套搜索所有字段进行搜索我将不得不使用嵌套查询?

回答

1

不能从在根部处QUERY_STRING引用嵌套领域。也就是说,这将不起作用:

{ 
    "query": { 
     "query_string": { 
      "query": "myNestedObj.myTextField:food" 
     } 
    } 
} 

要在特定的嵌套字段进行搜索,您必须使用嵌套的子句:

{ 
    "query": { 
     "nested": { 
     "path": "myNestedObj", 
     "query": { 
     "query_string": { 
      "query": "myNestedObj.myTextField:food" 
     } 
     } 
     } 
    } 
    } 
} 

然而,我发现,伪场“_all”不包括嵌套的字段,所以这个查询会发现含“食物”的myNestedObj.myTextField文件(以及其他地方)

{ 
    "query": { 
     "query_string": { 
      "query": "_all:food" 
     } 
    } 
} 
+0

感谢@anthonybruni,“不过,我发现,伪场‘_all’包含嵌套字段,所以这个查询我uld在myNestedObj.myTextField(以及其他任何地方)找到包含'food'的文档“这个答案正是我所要求的 – Pauli

0

尝试:

GET my_index/_search?q=paul