2014-09-23 59 views

回答

121

term查詢匹配單個詞條,因爲它是:值爲未分析。 所以,它不一定要小寫,這取決於你的索引。如果分析儀的查詢字段定義

{ 
    "query": { 
    "term" : { "user" : "bennett" } 
    } 
} 

match_phrase查詢將分析輸入和查找:

如果在索引時間提供Bennett並沒有分析的價值,下面的查詢將不會返回任何東西符合下列規定 - 文件:

  • 所有條款必須出現在場上
  • 它們必須具有相同的順序作爲輸入值

例如,如果您索引以下文件(使用standard分析儀進行現場foo):

{ "foo":"I just said hello world" } 

{ "foo":"Hello world" } 

{ "foo":"World Hello" } 

match_phrase查詢僅會返回第一個和第二個文檔:

{ 
    "query": { 
    "match_phrase": { 
     "foo": "Hello World" 
    } 
    } 
} 

query_string查詢搜索,默認情況下,一個_all字段包含幾個文本字段的文本一次。最重要的是,它被解析並支持一些運算符(AND/OR ...),通配符等(請參閱related syntax)。

作爲match_phrase查詢,根據在查詢字段中設置的分析器分析輸入。

match_phrase不同的是,分析後得到的術語不必是相同的順序,除非用戶在輸入周圍使用了引號。

例如,使用相同的文件和以前一樣,這個查詢將返回所有的文件:

{ 
    "query": { 
    "query_string": { 
     "query": "hello World" 
    } 
    } 
} 

但此查詢將返回相同的2個文件爲match_phrase查詢:

{ 
    "query": { 
    "query_string": { 
     "query": "\"Hello World\"" 
    } 
    } 
} 

關於這些查詢的不同選項還有很多要說的,請查看相關文檔:

希望這是非常明顯的,它會有所幫助。

+0

大,精彩,詳盡的解釋!我唯一不清楚的是分析結果究竟是... – blee908 2014-09-23 20:30:29

+1

不客氣:)分析儀處理文本以獲取最終索引/搜索的術語。閱讀這些[ElasticSearch權威指南的頁面](http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/_exact_values_vs_full_text.html),因爲這是一個非常重要的概念。 – ThomasC 2014-09-23 20:50:04

+1

是來自SQL,這裏有很多新的想法。查詢和過濾器之間的區別,精確值vs全文本,JSON搜索對象,以及彈性搜索執行搜索的方式。這麼多!感謝您的資源! – blee908 2014-09-23 21:03:36

8

我覺得有一個人肯定要關注對於他們之間的差異,以局部搜索 這是我分析的默認「標準分析器」: -

假設,我們有數據: -

{ 「名」:「你好」}

現在如果我們想用ell進行部分搜索呢?

期限查詢或匹配查詢

{"term":{"name": "*ell*" } 

都不行,返回留意。

{"term":{"name": "*zz* *ell*" } 

將無法​​正常工作,返回注意。

結論 - 期限或比賽不能在所有

通配符查詢做局部搜索: -

{"wildcard":{"name": "*ell*" } 

將工作給予結果{ 「名」:「你好「}

{"wildcard":{"name": "*zz* *ell*" } 

不行,返回n otot。

結論 - 通配符是能夠做到的部分搜索一個令牌只有

QUERY_STRING: -

{"query_string": {"default_field": "name","query": "*ell*"} 

將工作給予結果{ 「名」:「你好」}

{"query_string": {"default_field": "name","query": "*zz* *ell*" } 

將工作給出結果{「name」:「你好」}。

結論 - QUERY_STRING能夠與兩個令牌搜索給出

- 在這裏>標記是ELL和ZZ