菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
324
0

ES 查询Query DSL

原创
05/13 14:22
阅读数 21060

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

发表评论

0/200
324 点赞
0 评论
收藏