ES 查詢Query DSL


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官網地址

    ES Building Queries官網地址


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM