雖然 elasticsearch 自帶了很多的查詢,但經常用到的也就那麼幾個。我們將在
深入搜尋
章節詳細討論那些查詢的細節,接下來我們對最重要的幾個查詢進行簡單介紹。
match_all查詢
match_all
查詢簡單的
匹配所有文件。在沒有指定查詢方式時,它是預設的查詢:
"match_all"
:{}}
它經常與 filter 結合使用--例如,檢索收件箱裡的所有郵件。所有郵件被認為具有相同的相關性,所以都將獲得分值為1
的中性 `_score`。
match查詢
無論你在任何欄位上進行的是全文搜尋還是精確查詢,match
查詢是你可用的標準查詢。
如果你在乙個全文本段上使用match
查詢,在執行查詢前,它將用正確的分析器去分析查詢字串:
"match":}
如果在乙個精確值的字段上使用它,
例如數字、日期、布林或者乙個not_analyzed
字串字段,那麼它將會精確匹配給定的值:
"match":}}}}
對於精確值的查詢,你可能需要使用 filter 語句來取代 query,因為 filter 將會被快取。接下來,我們將看到一些關於 filter 的例子。
不像我們在
輕量 搜尋
章節介紹的字串查詢(query-string search),match
查詢不使用類似+user_id:2 +tweet:search
的查詢語法。它只是去查詢給定的單詞。這就意味著將查詢字段暴露給你的使用者是安全的;你需要控制那些允許被查詢字段,不易於丟擲語法異常。
multi_match查詢
multi_match
查詢可以在多個欄位上執行相同的match
查詢:
"multi_match":}
range查詢
"range":}
}被允許的操作符如下:
gt
大於gte
大於等於
lt
小於lte
小於等於
term查詢
term
查詢被用於精確值
匹配,這些精確值可能是數字、時間、布林或者那些not_analyzed
的字串:
"term":}
}}}term
查詢對於輸入的文字不
分析,所以它將給定的值進行精確查詢。
terms查詢
terms
查詢和term
查詢一樣,但它允許你指定多值進行匹配。如果這個字段包含了指定值中的任何乙個值,那麼這個文件滿足條件:
"terms":}
和term
查詢一樣,terms
查詢對於輸入的文字不分析。它查詢那些精確匹配的值(包括在大小寫、重音、空格等方面的差異)。
exists查詢和missing查詢
exists
查詢和missing
查詢
被用於查詢那些指定欄位中有值 (exists
) 或無值 (missing
) 的文件。這與sql中的is_null
(missing
) 和not is_null
(exists
) 在本質上具有共性:
"exists":}
這些查詢經常用於某個欄位有值的情況和某個欄位缺值的情況。
請求體查詢 驗證查詢
查詢可以變得非常的複雜,尤其 和不同的分析器與不同的字段對映結合時,理解起來就有點困難了。不過validate queryapi 可以用來驗證查詢是否合法。gb tweet validate query 以上validate請求的應答告訴我們這個查詢是不合法的 valid false shards ...
請求體查詢 查詢與過濾
elasticsearch 使用的查詢語言 dsl 擁有一套查詢元件,這些元件可以以無限組合的方式進行搭配。這套元件可以在以下兩種情況下使用 過濾情況 filtering context 和查詢情況 query context 當使用於 過濾情況 時,查詢被設定成乙個 不評分 或者 過濾 查詢。即,...
ES 學習3 請求體查詢
1.空查詢 get index 2014 type1,type2 search get search 2.查詢表示式 dsl只需將查詢語句傳遞給query引數 get search 查詢全部 match all 跟空查詢等價 get search 針對某個字段,結構 get search 3.查詢與...