2016-12-05 128 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