Elasticsearch基本操作-RESTful操作2

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: Elasticsearch基本操作-RESTful操作

条件删除文档

一般删除数据都是根据文档的唯一性标识进行删除,实际操作时,也可以根据条件对多条数据进行删除。


1.首先分别增加多条数据:

{
  "query":{
    "match":{
      "price":4000.00
    }
  }
}

fd5dbd629c674861bc2da42715a9aa1b.png

dd4a771dec374fd6b40421a625fedb2a.png


POST 请求 :http://127.0.0.1:9200/shopping/_delete_by_query

请求体内容为:

{
  "query":{
    "match":{
      "price":4000.00
    }
  }
}

a651d87ad8f440198d96884c765924af.png

{
  "took"【耗时】: 6,
  "timed_out"【是否超时】: false,
  "total"【总数】: 1,
  "deleted"【删除数量】: 1,
  "batches": 1,
  "version_conflicts": 0,
  "noops": 0,
  "retries": {
    "bulk": 0,
    "search": 0
  },
  "throttled_millis": 0,
  "requests_per_second": -1,
  "throttled_until_millis": 0,
  "failures": []
}

4.3 映射操作

有了索引库,等于有了数据库中的 database。


接下来就需要建索引库(index)中的映射了,类似于数据库(database)中的表结构(table)。创建数据库表需要设置字段名称,类型,长度,约束等;索引库也一样,需要知道这个类型下有哪些字段,每个字段有哪些约束信息,这就叫做映射(mapping)。


创建映射

创建索引student

PUT 请求 :http://127.0.0.1:9200/student

创建映射

PUT 请求 :http://127.0.0.1:9200/student/_mapping

4caa88f36f614a06b70d9a6dddee21b4.png

映射数据说明:

字段名:任意填写,下面指定许多属性,例如:title、subtitle、images、price

type:类型,Elasticsearch 中支持的数据类型非常丰富,说几个关键的:

String 类型,又分两种:

text:可分词

keyword:不可分词,数据会作为完整字段进行匹配

Numerical:数值类型,分两类

基本数据类型:long、integer、short、byte、double、float、half_float

浮点数的高精度类型:scaled_float

Date:日期类型

Array:数组类型

Object:对象

index:是否索引,默认为 true,也就是说你不进行任何配置,所有字段都会被索引。

true:字段会被索引,则可以用来进行搜索

false:字段不会被索引,不能用来搜索

store:是否将数据进行独立存储,默认为 false

原始的文本会存储在_source 里面,默认情况下其他提取出来的字段都不是独立存储的,是从_source 里面提取出来的。当然你也可以独立的存储某个字段,只要设置"store": true 即可,获取独立存储的字段要比从_source 中解析快得多,但是也会占用更多的空间,所以要根据实际业务需求来设置。

analyzer:分词器,这里的 ik_max_word 即使用 ik 分词器,后面会有专门的章节学习

查看映射

GET 请求 :http://127.0.0.1:9200/student/_mapping

721f78b320e94f39bc9f9f3bf633b627.png


索引映射关联

PUT 请求 :http://127.0.0.1:9200/student1

{
  "settings": {},
  "mappings": {
    "properties": {
      "name": {
        "type": "text",
        "index": true
      },
      "sex": {
        "type": "text",
        "index": false
      },
      "age": {
        "type": "long",
        "index": false
      }
    }
  }
}

相当于创建索引的时候进行映射关联

8ee8993d49044963980c40ddf94d945d.png


4.4 高级查询

Elasticsearch 提供了基于 JSON 提供完整的查询 DSL 来定义查询

定义数据 :

# POST /student/_doc/1001
{
  "name":"zhangsan",
  "nickname":"zhangsan",
  "sex":"男",
  "age":30
}
# POST /student/_doc/1002
{
  "name":"lisi",
  "nickname":"lisi",
  "sex":"男",
  "age":20
}
# POST /student/_doc/1003
{
  "name":"wangwu",
  "nickname":"wangwu",
  "sex":"女",
  "age":40
}
# POST /student/_doc/1004
{
  "name":"zhangsan1",
  "nickname":"zhangsan1",
  "sex":"女",
  "age":50
}
# POST /student/_doc/1005
{
  "name":"zhangsan2",
  "nickname":"zhangsan2",
  "sex":"女",
  "age":30
}

查看索引库中所有文档

GET/POST 请求 :http://127.0.0.1:9200/_search

b0431c38a045493db0187c65b3f45102.png


查看指定索引下所有文档

GET/POST 请求 :http://127.0.0.1:9200/student/_search


e5797899f71445f799818bcf60a51df8.png

{
  "took"【查询花费时间,单位毫秒】: 1,
  "timed_out"【是否超时】: false,
  "_shards"【分片信息】: {
    "total"【总数】: 1,
    "successful"【成功】: 1,
    "skipped"【忽略】: 0,
    "failed"【失败】: 0
  },
  "hits"【搜索命中结果】: {
    "total"【搜索条件匹配的文档总数】: {
      "value"【总命中计数的值】: 5,
      "relation"【计数规则】: "eq" # eq 表示计数准确, gte 表示计数不准确
    },
    "max_score"【匹配度分值】: 1,
    "hits"【命中结果集合】: [
      ... ...
    ]
  }
}

条件匹配查询

2.路径拼接参数查询(推荐第二种)

GET/POST 请求 :http://127.0.0.1:9200/student/_search?q=name:zhangsan

参数 说明
代码增加查询参数
q 表示查询的意思
name 查询的字段名

e6e9ef203a7740eca1f711c75880a1ef.png


2.请求体携带参数查询(推荐)

match 匹配类型查询,会把查询条件进行分词,然后进行查询,多个词条之间是 or 的关系


GET/POST 请求 :http://127.0.0.1:9200/shopping/_search

请求体内容为:

{
    "query": {
        "match":{
            "name":"zhangsan"
        }
    }
}

f09d5ac6e2d64d02ab3a4d4cf3f15413.png

字段匹配查询

multi_match 与 match 类似,不同的是它可以在多个字段中查询。


GET 请求 :http://127.0.0.1:9200/student/_search

{
  "query": {
    "multi_match": {
      "query": "zhangsan",
      "fields": ["name","nickname"]
    }
  }
}

a7e3e94958a844e38e68864baafc200b.png

关键字精确查询

term 查询,精确的关键词匹配查询,不对查询条件进行分词。


GET 请求 :http://127.0.0.1:9200/student/_search

{
  "query": {
    "term": {
      "name": {
        "value": "zhangsan"
      }
    }
  }
}


d7243818e1b24869b3fd6ae9c9a889b3.png

多关键字精确查询

terms 查询和 term 查询一样,但它允许你指定多值进行匹配。

如果这个字段包含了指定值中的任何一个值,那么这个文档满足条件,类似于 mysql 的 in。


GET 请求 :http://127.0.0.1:9200/student/_search


{
  "query": {
    "terms": {
      "name": ["zhangsan","lisi"]
    }
  }
}

423744de639542f2967b2746048bdb49.png

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
6月前
|
JSON DataWorks 关系型数据库
DataWorks操作报错合集之同步Elasticsearch数据报错:Cat response did not contain a JSON Array,是什么导致的
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
5月前
|
监控 搜索推荐 Go
万字详解!在 Go 语言中操作 ElasticSearch
本文档通过示例代码详细介绍了如何在Go应用中使用`olivere/elastic`库,涵盖了从连接到Elasticsearch、管理索引到执行复杂查询的整个流程。
120 0
|
7月前
|
Kubernetes 关系型数据库 MySQL
实时计算 Flink版产品使用合集之在Kubernetes(k8s)中同步MySQL变更到Elasticsearch该怎么操作
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
7月前
|
安全 Java API
SpringBoot 实现 elasticsearch 索引操作(RestHighLevelClient 的应用)
SpringBoot 实现 elasticsearch 索引操作(RestHighLevelClient 的应用)
99 1
|
7月前
|
自然语言处理 Java 索引
SpringBoot 实现 elasticsearch 查询操作(RestHighLevelClient 的案例实战)
SpringBoot 实现 elasticsearch 查询操作(RestHighLevelClient 的案例实战)
275 1
|
7月前
|
Java API
Java操作elasticsearch
Java操作elasticsearch
46 0
|
7月前
|
存储 JSON Go
ElasticSearch的HTTP操作 和Go客户端
【2月更文挑战第13天】ElasticSearch的HTTP操作 和Go客户端操作
154 0
|
16天前
|
JSON 缓存 JavaScript
深入浅出:使用Node.js构建RESTful API
在这个数字时代,API已成为软件开发的基石之一。本文旨在引导初学者通过Node.js和Express框架快速搭建一个功能完备的RESTful API。我们将从零开始,逐步深入,不仅涉及代码编写,还包括设计原则、最佳实践及调试技巧。无论你是初探后端开发,还是希望扩展你的技术栈,这篇文章都将是你的理想指南。
|
9天前
|
JSON JavaScript 前端开发
深入浅出Node.js:从零开始构建RESTful API
在数字化时代的浪潮中,后端开发作为连接用户与数据的桥梁,扮演着至关重要的角色。本文将引导您步入Node.js的奇妙世界,通过实践操作,掌握如何使用这一强大的JavaScript运行时环境构建高效、可扩展的RESTful API。我们将一同探索Express框架的使用,学习如何设计API端点,处理数据请求,并实现身份验证机制,最终部署我们的成果到云服务器上。无论您是初学者还是有一定基础的开发者,这篇文章都将为您打开一扇通往后端开发深层知识的大门。
26 12
|
12天前
|
XML JSON 缓存
深入理解RESTful API设计原则与实践
在现代软件开发中,构建高效、可扩展的应用程序接口(API)是至关重要的。本文旨在探讨RESTful API的核心设计理念,包括其基于HTTP协议的特性,以及如何在实际应用中遵循这些原则来优化API设计。我们将通过具体示例和最佳实践,展示如何创建易于理解、维护且性能优良的RESTful服务,从而提升前后端分离架构下的开发效率和用户体验。