2016-01-12 108 views
2

我正在寫一個查詢字符串以匹配一個字段中的多個字符串。Elasticsearch字符串查詢匹配一個字段的多項術語

我需要配合server_physical類型的文檔,並具有string場名爲cpu其中將包含類似E52620v3話。

這是我將返回正是我所需要的文件:

"_type:server_physical AND *2620* AND *E5* AND *v3*" 

但它不是一件好事,因爲它也將匹配等領域都包含這些用語。當我將cpu字段添加到查詢中時,沒有文檔匹配。像這些:

"_type:server_physical AND cpu:*2620* AND cpu:*E5* AND cpu:*v3*" 

或本:

"_type:server_physical AND CPU:(*2620* AND *E5* AND *v3*)" 

什麼是應該做的查詢字符串的正確方法是什麼?除了彈性搜索官方指南中很短的一篇文章外,我找不到任何關於query string的其他文檔,其中有幾個關於它的句子。

這一領域的映射:

{ 
    "index": "not_analyzed", 
    "type": "string" 
} 
+0

字段cpu的映射是什麼? – ChintanShah25

回答

1

你的查詢都是精品。雙方應努力:

"_type:server_physical AND cpu:*2620* AND cpu:*E5* AND cpu:*v3*" 
"_type:server_physical AND cpu:(*2620* AND *E5* AND *v3*)" 

訣竅在於string query參數lowercase_expanded_terms之一。它默認爲true,並將通配符中包含的所有字符縮小,即您的E5變爲e5。嘗試將它設置爲false,所有應該工作:

POST index/_search 
{ 
    "query": { 
     "query_string": { 
      "query": "_type:server_physical AND cpu:(*2620* AND *E5* AND *v3*)", 
      "lowercase_expanded_terms": false 
     } 
    } 
} 

獎金編輯:爲什麼它不cpu:工作?因爲默認query string將在_all字段上進行搜索(除非您禁用它),這是文檔中所有字段的拼接。然後對其進行分析,如果您未指定分析儀,則將使用默認的分析儀(其中包括)_all字段中的所有術語,因此它將包含e5而不是E5

相關問題