【ES笔记02】ElasticSearch数据库之查询操作(match、must、must_not、should、_source、filter、range、exists、ids、term、terms)

这篇具有很好参考价值的文章主要介绍了【ES笔记02】ElasticSearch数据库之查询操作(match、must、must_not、should、_source、filter、range、exists、ids、term、terms)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这篇文章,主要介绍ElasticSearch数据库之查询操作(match、must、must_not、should、_source、filter、range、exists、ids、term、terms)。

目录

一、布尔查询

1.1、主键查询

1.2、两种查询方式

(1)路径参数查询

(2)请求体参数查询

1.3、match查询

(1)match

(2)match_all

1.4、过滤字段

1.5、布尔查询(must)

1.6、布尔查询(should)

1.7、布尔查询(must_not)

二、filter过滤查询

2.1、range范围查询

2.2、exists是否存在

2.3、ids过滤查询

2.4、term关键词查询

2.5、terms多关键词查询


一、布尔查询

1.1、主键查询

# 主键查询
GET /索引名称/_doc/doc文档的id

# 测试案例
GET /idx_20221124/_doc/2022001

这种查询方式,每一次只能够查询一条doc文档,如果要查询很多doc文档,那么就需要通过【_search】命令。

1.2、两种查询方式

(1)路径参数查询

将查询条件放在请求路径后面,查询条件使用【q=字段名称:字段值】这种格式,如下所示:

# 单个查询条件
# 查询age字段等于20的doc文档
GET /idx_20221124/_search?q=age:20

(2)请求体参数查询

当查询条件有很多个的时候,如果将所有的查询条件都放在请求路径上面,显然不合适,所以ES可以将查询条件放到请求体里面,请求体里面的查询条件需要按照指定的格式,不然ES会解析报错。

# 
# 查询
GET /idx_20221124/_search
{
  "query": {
    "指定查询类型": {
      "查询字段": "查询值"
    }
  }
}

# 查询
GET /idx_20221124/_search
{
  "query": {
    "match": {
      "age": 20
    }
  }
}

1.3、match查询

match关键字,相当于mysql数据库中的like查询,match查询的字段如果是text类型,那么text会被分词,match就会匹配分词,查询所有包含分词的doc文档,如果不是text类型的,那就是精确查询。

match有多种形式,如下所示:

  • match:查询指定条件的数据,match会将查询的条件进行分词操作,然后只有doc文档中包含分词,就都会查询出来。
  • match_all:查询所有数据。
  • match_phrase:匹配短语,match是会查询所有包含分词的doc文档,而match_phrase则是匹配整个短语,才会返回对应的doc文档。
  • match_phrase_prefix:匹配短语的前缀部分,这个只能使用在text类型字段。

(1)match

# 查询所有数据
# 查询age等于20的doc文档
GET /idx_20221124/_search
{
  "query": {
    "match": {
      "age": 20
    }
  }
}

(2)match_all

match_all表示查询所有的数据,默认是10条,因为ES默认分页是10条数据,这个关键字不能写查询条件。

# 查询所有数据
GET /idx_20221124/_search
{
  "query": {
    "match_all": {}
  }
}

执行结果:

【ES笔记02】ElasticSearch数据库之查询操作(match、must、must_not、should、_source、filter、range、exists、ids、term、terms)

1.4、过滤字段

ES查询时候,默认情况下,会将doc文档中的所有字段都返回,如果查询时候不想查询某个字段,那么可以使用【_source】属性设置查询哪些字段。【_source】就相当于mysql数据库中的【select 字段1,字段2】形式。

【_source】过滤字段:

  • 第一种:_source=false,表示所有字段都不返回。
  • 第二种:_source: ["username", "age"],只返回指定的字段。

案例代码:

# 查询数据,不返回字段
GET /idx_20221124/_search
{
  "query": {
    "match": {
      "age": 20
    }
  },
  "_source": false
}

# 查询数据,返回指定字段
GET /idx_20221124/_search
{
  "query": {
    "match": {
      "age": 20
    }
  },
  "_source": ["username", "age"]
}

执行结果:

【ES笔记02】ElasticSearch数据库之查询操作(match、must、must_not、should、_source、filter、range、exists、ids、term、terms)

1.5、布尔查询(must)

条件查询,和mysql数据库中的条件查询是类似的,只不过ES中使用JSON的方式来组织查询条件,条件查询基本格式如下所示:

# 条件查询数据
GET /索引名称/_search
{
  "query": {
    "bool": {
      "条件类型": [
        {条件1},
        {条件2}
      ]
    }
  }
}

条件查询中的【must】和mysql数据库中的【and】是相同作用,【must】接收一个数组,数组中的所有条件都成立,这个时候才会查询对应数据。

# 查询数据
GET /idx_20221124/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "nickname": "java"
          }
        },
        {
          "match": {
            "age": 25
          }
        }
      ]
    }
  }
}

执行结果:

【ES笔记02】ElasticSearch数据库之查询操作(match、must、must_not、should、_source、filter、range、exists、ids、term、terms)

1.6、布尔查询(should)

既然有and运算,那当然少不了or运算,ES中使用【should】表示或运算,相当于mysql数据库中的【or】连接符。

# 查询数据
GET /idx_20221124/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "nickname": "java"
          }
        },
        {
          "match": {
            "age": 31
          }
        }
      ]
    }
  }
}

执行结果:

【ES笔记02】ElasticSearch数据库之查询操作(match、must、must_not、should、_source、filter、range、exists、ids、term、terms)

1.7、布尔查询(must_not)

must_not是非运算,相当于mysql数据库中的【!】非运算,即:【not】。

# 查询数据
# 查询年龄不是25的所有doc文档
GET /idx_20221124/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "match": {
            "age": 25
          }
        }
      ]
    }
  }
}

执行结果:

【ES笔记02】ElasticSearch数据库之查询操作(match、must、must_not、should、_source、filter、range、exists、ids、term、terms)

二、filter过滤查询

2.1、range范围查询

filter是用于过滤查询的关键字,在filter里面可以使用多种查询条件,例如:range、term、terms、exists、ids几种常见的查询,这里先介绍range范围查询,范围查询首先需要指定范围,下面是几个常见的范围关键字。

range范围关键字:

  • gt:大于。
  • lt:小于。
  • gte:大于等于。
  • lte:小于等于。
  • eq:等于。
  • ne:不等于。

range范围查询的语句格式:

# 查询数据
GET /索引名称/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "range": {
            "指定字段": {
              "条件": 范围值,
              "条件": 范围值
            }
          }
        }
      ]
    }
  }
}

具体案例代码:

# 查询数据
GET /idx_20221124/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "range": {
            "age": {
              "gt": 20,
              "lt": 30
            }
          }
        }
      ]
    }
  }
}

执行结果:

【ES笔记02】ElasticSearch数据库之查询操作(match、must、must_not、should、_source、filter、range、exists、ids、term、terms)

2.2、exists是否存在

exists关键字,是表示指定的字段的值是否存在,类似于mysql数据库中的【is null】,但是ES中exists用在filter里面时候,表示过滤掉不存在指定字段的doc文档。

# 查询数据
# 过滤nickname不存在的doc文档数据
GET /idx_20221124/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "exists": {
            "field": "nickname"
          }
        }
      ]
    }
  }
}

运行上面语句之后,会返回所有doc文档中,nickname字段不存在的doc文档结果。

注意:exists会返回指定字段存在的doc文档,只有当字段等于null,即:不存在时候才会匹配成功,如果字段等于空字符串不会匹配成功。

2.3、ids过滤查询

ids查询,这就相当于mysql数据库中的【in】条件查询,多个条件值查询,但是这里的只能够对doc文档的id进行多个值查询。

# 查询数据
# 查询doc文档id等于:2022001、2022005的数据
GET /idx_20221124/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "ids": {
            "values": [
              "2022001", "2022005"
            ]
          }
        }
      ]
    }
  }
}

执行结果:

【ES笔记02】ElasticSearch数据库之查询操作(match、must、must_not、should、_source、filter、range、exists、ids、term、terms)

2.4、term关键词查询

term表示关键字查询,即:判断doc文档里面是否包含给定的term关键字,如果包含,则满足条件,否则不满足。

# 查询数据
GET /索引名称/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "字段名称": "字段值"
          }
        }
      ]
    }
  }
}

# 测试案例
GET /idx_20221124/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "username": "java"
          }
        }
      ]
    }
  }
}

执行结果:

【ES笔记02】ElasticSearch数据库之查询操作(match、must、must_not、should、_source、filter、range、exists、ids、term、terms)

2.5、terms多关键词查询

term每次只能够匹配一个关键字,而terms则允许多个关键字匹配。

# 查询数据
GET /idx_20221124/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "terms": {
            "字段名称": [
              "字段值1",
              "字段值2",
              "字段值n"
            ]
          }
        }
      ]
    }
  }
}

# 测试案例
GET /idx_20221124/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "terms": {
            "username": [
              "java",
              "python"
            ]
          }
        }
      ]
    }
  }
}

执行结果:

【ES笔记02】ElasticSearch数据库之查询操作(match、must、must_not、should、_source、filter、range、exists、ids、term、terms)

到此,ES中的一些基本查询操作就介绍完啦。

综上,这篇文章结束了,主要介绍ElasticSearch数据库之查询操作(match、must、must_not、should、_source、filter、range、exists、ids、term、terms)。文章来源地址https://www.toymoban.com/news/detail-407634.html

到了这里,关于【ES笔记02】ElasticSearch数据库之查询操作(match、must、must_not、should、_source、filter、range、exists、ids、term、terms)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【ES数据库】Elasticsearch安装使用

    Elasticsearch 和 MongoDB/Redis 类似,是非关系型数据库,从索引文档到文档能被搜索到只有一个轻微的延迟,是采用Restful API标准的可扩展和高可用的实时数据分析的全文搜索工具 Elastic Search 的实现原理是,利用内置分词器(Analyzer)对数据库文本进行分词,将解析出的和数据

    2024年02月04日
    浏览(32)
  • 读图数据库实战笔记02_图数据建模

    1.1.1. 通常用名词来表示 1.1.2. 描述一个领域中的事物或者事物类型 1.1.2.1. 汽车 1.1.2.2. 用户 1.1.2.3. 地理位置 1.1.3. 在逻辑模型和技术实现过程中,实体通常会变成“顶点” 1.2.1. 用动词(或动词短语)来表示 1.2.2. 描述实体之间的互动 1.2.2.1. 一辆卡车移动到一个位置”场

    2024年02月08日
    浏览(32)
  • elasticsearch 安装 (es数据库安装详细)

    以下操作在debian11下,其它linux版本相同 安装的是8.6.2版本(2023.3),可以直接复制使用 以下操作默认在root下进行,如果切换用户会说明 1.下载安装包 注意:如果要安装kibana,版本尽量要一致 主体程序从这里下载 链接: es 2.创建es的用户 3.创建es存储位置 存放在/var/es(根据自

    2024年02月05日
    浏览(37)
  • Elasticsearch ES操作:查询数据(全部、分页、单条)

    查询 条件查询 指定条数 返回结果

    2024年02月16日
    浏览(26)
  • 读改变未来的九大算法笔记02_数据库

      2.1.1. 当一个程序崩溃时,它会丢掉所有正在处理的东西 2.1.2. 只有安放在计算机文件系统中的信息会得到保存 2.1.3. 崩溃相当宽泛:包括任何可能导致计算机停止运行进而损失数据的事 2.1.3.1. 可能的事件包括断电、硬盘出错、其他硬件出错,以及操作系统或应用程序中的

    2024年02月08日
    浏览(32)
  • flask笔记 02 | Flask数据库连接(sqlite、mysql)

    Flask没有指定使用的数据库,不像django提供了orm数据库抽象层,可以直接采用对象的方式操作数据库。但为了开发效率,在开发Flask项目中一般会选择 SQLALchemy 来操作数据库,类似django的ORM. SQLALchemy实际是对数据库的抽象,让开发者不直接使用sql语句进行开发,而是通过Pytho

    2024年01月25日
    浏览(41)
  • 数据库作业——select查询操作

    创建数据库 插入数据 1、显示所有职工的基本信息。 2、查询所有职工所属部门的部门号,不显示重复的部门号。 3、求出所有职工的人数。 4、列出最高工和最低工资。 5、列出职工的平均工资和总工资。 6、创建一个只有职工号、姓名和参加工作的新表,名为工作日期表。

    2024年02月13日
    浏览(41)
  • 数据库实验一:基本表操作、基本数据查询和复杂数据查询

    按下图创建四个表:teacher、student、course和SC,为属性选择合适的域、合适的主码和外键约束,并为他们插入所列出数据; 中文语义 teacher (TID,TNAME,DEPT,SALARY) 教师(教工号,姓名,系,薪水) student (SID,SNAME,DEPT,AGE,GENDER) 学生(学号,姓名,系,年龄,性别) course (CID,CNAME,DE

    2024年02月01日
    浏览(43)
  • ElasticSearch中实现模糊查询效果(类似数据库中like功能)

    场景: 业务要求提供一个es查询功能,实现类似模糊查询效果,并且命中字段显示红色。举例说明: es中字段内容 输入(即) 是否输出 你好,中国,强大的祖国 中国 是(则‘中国’两个字飘红) 你好,中国,强大的祖国 俄国 否 你好,中国,强大的祖国 最大 否 实

    2024年02月12日
    浏览(31)
  • 【ElasticSearch】深入探索 ElasticSearch 对数据的聚合、查询自动补全、与数据库间的同步问题以及使用 RabbitMQ 实现与数据库间的同步

    在本文中,我们将深入探讨 ElasticSearch 在数据处理中的关键功能,包括数据聚合、查询自动补全以及与数据库的同步问题。 首先,我们将聚焦于 ElasticSearch 强大的聚合功能,解释什么是聚合以及如何通过 DSL 语句和 RestClient 实现各种聚合操作。这一功能能够让我们更深入地了

    2024年02月08日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包