match_all(獲取所有索引文檔)
quert_string(獲取包含指定關鍵字文檔)
默認查詢_all字段,_all字段是由所有字段組合而成的,可以通過description:關鍵字,獲取通過請求的時候來設置default_field。可使用AND和OR這種布爾操作符來組合詞條搜索,也可以使用減號(-)來排除文檔。
缺點:由於query_string可以通過組合條件來獲取所有索引的文檔,建議替換成term,terms,match或者multi_match查詢
term查詢和term過濾器
term可以指定搜索的文檔字段和關鍵詞(被搜索的關鍵詞是沒有經過分析的,所以返回的文檔是精准匹配關鍵詞的)term過濾器也可以是返回的結果包含指定關鍵詞,但是無需計算得分,所以可以使用match_all,返回的所有文檔_score都是1.0分。
terms查詢
與term查詢相似,允許查詢多個關鍵詞,通過minimum_should_match設置最低匹配幾個關鍵詞。
match查詢
查詢指定字段的關鍵詞,也可以查詢_all字段,match查詢有多中方式,最常見的是布爾查詢和詞組。
1、布爾查詢
默認情況下,match查詢使用布爾行為和OR操作符。例如,如果搜索文本“Elasticsearch Denver”,Elasticsearch 會搜索“Elasticsearch OR Denver”,同時匹配“Elasticsearch Amsterdam’和“Denver Clojure Group”聚合分組。為了搜索同時包含“Elasticsearch” 和“Denver” 關鍵詞的結果,將match字段的name修改為一個映射,並將operator字段設置為and,達到改變操作符的目的。
2、詞組
在文檔中搜索指定的詞組時,phrase查詢是非常有用的,每個單詞的位置之間可以留有余地。這種余地稱作slop,用於表示詞組中多個分詞之間的距離。假設你試圖記起某個聚合分組的名字,只記得“Enterprise” 和“London” 兩個詞,但是不記得名字其余的部分了。你可以搜.索詞組“enterprise london”,將slop設置為1或者2,而不是默認的0,如此-一來,沒有必要知道分組的精確標題,就可以尋找包含該詞組的結果。
phrase_prefix查詢匹配最后一個關鍵詞。在下面的例子中,phrase_ prefix查詢使用的是“elasticsearch den”。Elasticsearch 使用“den”文本進行前綴匹配,查找所有name字段,發現那些以“den” 開始的取值(如“Denver”)。 由於產生的結果可能是個很大的集合,需要限制擴展的數量。
使用multi_ match來匹配多個字段
盡管很容易聯想到,multi_ match查詢和搜索單字段中多個匹配的詞條查詢,它們的行為表現會非常相像,但是兩者的行為還是有細微的區別。多字段匹配允許你搜索多個字段中的值。在聚合的案例中,這一點非常有用,可以同時在分組的名稱和描述中搜索某個字符串。