Query Content:查詢上下文,含query參數,既要確定文檔是否匹配,還要計算匹配度多少,即_score字段的相關性得分
Filter Content:過濾上下文,如在bool查詢中含filter或must_not參數,只關心文檔是否和查詢匹配,常用過濾器將由ES自動緩存,以提高性能
1. Trem-level queries:術語級查詢
(1) term query:詞條查詢,根據字段值精確匹配文檔,不要查詢text字段,因為被分詞了,改用match查詢即可,與數據庫 = 對應
A. kibana操作

B. java編寫
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("os.name", "Ubuntu");
(2)terms query:多詞條查詢,精確匹配字段值的一個或多個文檔,與term類似
A. kibana操作

B. java編寫
TermsQueryBuilder termsQueryBuilder = QueryBuilders.termsQuery("os.name", "Ubuntu", "CentOS Linux");
(3) wildcard query:通配符查詢,返回與通配符模式匹配的文檔,?代表匹配任何單個字符,*代表零個或多個字符,通配符不要用在開頭,會降低搜索性能,與MySQL中like對應
A. kibana操作

B. java編寫
WildcardQueryBuilder wildcardQueryBuilder = QueryBuilders.wildcardQuery("os.name", "CentOS*");
(4) prefix query:前綴查詢,返回在提供的字段中包含特定前綴的文檔
A. kibana操作

B. java編寫
PrefixQueryBuilder prefixQueryBuilder = QueryBuilders.prefixQuery("os.name", "CentOS");
(5) fuzzy query:模糊查詢,返回包含與搜索字詞相似的字詞的文檔
A. kibana操作
B. java編寫
FuzzyQueryBuilder fuzzyQueryBuilder = QueryBuilders.fuzzyQuery("os.name", "OS");
(6) range query:范圍查詢,返回包含提供范圍內的術語的文檔,注意日期格式,與MySQL中between and對應
A. kibana操作

B. java編寫
RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("timestamp").gte("2020-01-09 03:45:01.622").lte("2020-01-09 03:46:01");
(7) ids query:ID查詢,根據其ID集返回文檔,與MySQL中in對應
A. kibana操作

B. java編寫
IdsQueryBuilder idsQueryBuilder = QueryBuilders.idsQuery();
idsQueryBuilder.addIds("MSmnh28BAFJfMDTmjVXf", "Mymnh28BAFJfMDTmjVXf");
(8) exists query:存在某字段的值,與MySQL中is not null對應
注意:字段用作script腳本時,為空會報錯;索引不存在時,聚合值為null,所以需要用到這個exists
A. kibana操作
B. java編寫
ExistsQueryBuilder existsQueryBuilder = QueryBuilders.existsQuery("group");
2. Compound queries:復合查詢
A. Boolean:布爾查詢,它是使用一個或多個布爾子句構建的,與文檔匹配的查詢,這些文檔與其他查詢的布爾組合查詢
| must | 根據條件過濾文檔,返回的文檔必須要滿足must子句的條件,會影響相關性算分值,相當於mysq中的and |
| must_not | 根據條件過濾文檔,返回的文檔必須不包含must_not子句的條件,子句在Filter Content中執行,相當於mysql中not |
| should | 根據條件過濾文檔,返回的文檔應該包含should子句的條件,會影響相關性算分值,相當於mysql中的or |
| filter | 子句必須包含在匹配的文檔中,查詢的分數被忽略,子句在Filter Content執行,並且子句被考慮用於上下文 |
3. Full text queries:全文查詢
A. Simple query string:簡單查詢字符串查詢,使用有限但容錯語法的解析器,根據提供的查詢字符串返回文檔;
參數含義:
query:要解析並用於搜索的查詢字符串;
fields:要搜索的字段數組;
default_operator:用於解釋查詢字符串中的文本的默認布爾邏輯,有效值有OR(默認值)和AND;
analyze_wildcard:設置為true,則查詢嘗試分析查詢字符串中的通配符術語,默認為false;
analyzer:分析器,用於將查詢字符串中的文本轉換為標記,如果未映射任何分析器,則使用索引的默認分析器;
QueryBuilders.simpleQueryStringQuery("hao123").field("title")
可參考:ES Query DSL官網地址
