当前位置: 首页 > news >正文

ElasticSearch基础操作

1. 安装postman

2. HTTP操作

2.1 文档操作

2.1.1 创建文档(post)

{

"_index": "shopping", # 索引名字

"_type": "_doc", # 类型:文档

"_id": "LK6O_J4BxidwAQ78tNpn", # 唯一标识,类似mysql主键id,这里是随机生成。

"_version": 1,

"result": "created", # 创建成功

"_shards": { # 分片信息

"total": 2, # 分片数量

"successful": 1,

"failed": 0

},

"_seq_no": 0,

"_primary_term": 1

}

{ "_index": "shopping", # 索引名字 "_type": "_doc", # 类型:文档 "_id": "LK6O_J4BxidwAQ78tNpn", # 唯一标识,类似mysql主键id,这里是随机生成。 "_version": 1, "result": "created", # 创建成功 "_shards": { # 分片信息 "total": 2, # 分片数量 "successful": 1, "failed": 0 }, "_seq_no": 0, "_primary_term": 1 }

如果要自己指定id,而不是让es随机生成,可以在URL中指定

http://hadoop101:9200/shopping/_doc/1

2.1.2 查看文档(get)

错误:http://hadoop101:9200/shopping/_doc/

正确:http://hadoop101:9200/shopping/_doc/1(要带上主键)

2.1.3 修改文档(post)

覆盖模式

http://hadoop101:9200/shopping/_doc/1

更新模式(修改单个字段)

http://hadoop101:9200/shopping/_update/1

覆盖会以当前的字段名、数量,覆盖。

更新则会更新当前字段的内容,如果这个字段以前不存在,则会新增。

2.1.4 删除文档(delete、post)

根据主键删除(delete)

http://hadoop101:9200/shopping/_doc/1

根据条件删除(post)

http://hadoop101:9200/shopping/_delete_by_query

正则匹配

{ "query" : { "regexp" : { "title": "_doc_.*" } } }

完全匹配

{ "query" : { "match" : { "title": "_doc_" } } }

2.2 高级查询

2.2.1 查询所有文档(get)

http://hadoop101:9200/shopping/_search

{ "query" : { "match_all" : {} } }

"took": 5, # 查询耗时:ms

2.2.2 匹配查询

http://hadoop101:9200/shopping/_search

{ "query" : { "match" : { "title" : "手机名字" } } }

查看要查找的内容,会怎样进行切分。

post(http://hadoop101:9200/shopping/_analyze) { "text" : "手机1", "field" : "name" }

2.2.3 字段匹配查询(get)

http://hadoop101:9200/shopping/_search { "query" : { "multi_match" : { "query" : "手", "fields" : ["name", "title"] } } }

2.2.4 关键字精确查询

{ "query" : { "term" : { "title.keyword" : "手机1" } } } --------------------------- # title是text类型,在es中,会对这个字段进行分词,也就是底层存储的是[手,机,1] { "query" : { "term" : { "title" : { "value" : "手机1" } } } }


2.2.5 多关键字精确查询

{ "query" : { "terms" : { "title.keyword" : ["手机2", "手机1"] } } }


2.2.6 指定展示查询的字段

{ "_source" : ["name", "title"], "query" : { "terms" : { "title.keyword" : ["手机2", "手机1"] } } }


2.2.7 过滤字段

includes,展示的字段

excludes,不展示的字段。

同时存在的字段,则不会展示

{ "_source" : { "includes" : ["price"], "excludes" : ["price"] }, "query" : { "terms" : { "title.keyword" : ["手机2", "手机1"] } } }


2.2.8 组合查询

{ "query" : { "bool" : { "must" : [{"term":{"name.keyword":"手"}}] , "must_not" : [{"term" : {"title.keyword":"手机2"}}] } } }


2.2.9 范围查询

{ "query" : { "range" : { "price" : { "gte" : 10, "lte" : 10000 } } } }


2.2.10 模糊查询

{ "query" : { "fuzzy" : { "name" : { "value" : "Samsung" } } } }


2.2.11 多字段排序

"_score"不是一个实际字段,而是es查询时,计算出来的匹配度。比如在淘宝搜索"运动鞋",按价格排序。如果价格相同,则根据匹配度来排序。这个字段,暂时还不知道用处

{"query": { "match_all" : {} } , "sort" : [ {"price": { "order": "desc" }}, { "_score" : { "order" : "desc" } } ] }


2.2.12 聚合查询

size=0,则只返回聚合结果

size=3,则返回3条查询结果,并返回聚合结果(聚合的还是所有price的累加)。

{"aggs":{ "max_age" : { "sum" : {"field":"price"} } } ,"size" : 0 }


2.2.13 桶聚合查询

意思是可以对多个字段进行聚合,类似group by A, B

{ "aggs":{ "max_age" : { "terms" : {"field":"name.keyword"}, "aggs": { "sum-price": { "sum" : {"field" : "price"} } } } } ,"size" : 0 }

2.3 映射操作

索引库 = database,索引 = 表,文档 = 一行数据

# 查询有多少个索引(表) [get] >> http://hadoop101:9200/_cat/indices # 查看索引(建表语句) [get] >> http://hadoop101:9200/shopping/_mapping

type类型:
string
text:可分词
keyword:不可分词

numerical
long,integer,short,byte,double,float,half_float
scaled_float:浮点、高精度

date:日期
array:数组
Object:对象

index
True:字段会被索引(默认)
false:不会被索引,不能用来搜索

store:数据将独立存储,默认false

2.3.1 创建索引

[put] >> http://hadoop101:9200/test02/

在URL中写_mapping,是索引已经存在的前提下。如果没有存在,则用下面的方式

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

使用下面这种写法,要注意。如果这里定义的index和以前的不一样,会报错。

{ "properties":{ "name":{ "type":"text", "index":true }, "price":{ "type":"long", "index":true } } }

2.3.2 查看索引

【GET】 >>> http://hadoop101:9200/test03/_mapping

2.4 索引操作(了解)

【GET】 >>> http://hadoop101:9200/_cat/indices?v 查看所有索引

【GET】 >>> http://hadoop101:9200/test03 查看单个索引

【DELETE】 >>> http://hadoop101:9200/test03 删除索引

3. Java API操作

3.1 创建Maven

<dependencies> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>7.8.0</version> </dependency> <!-- elasticsearch 的客户端 --> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.8.0</version> </dependency> <!-- elasticsearch 依赖 2.x 的 log4j --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.8.2</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.8.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.9</version> </dependency> <!-- junit 单元测试 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> </dependencies>

3.2 索引操作

3.2.1)创建索引

RestHighLevelClient esClient = new RestHighLevelClient( RestClient.builder(new HttpHost("hadoop101", 9200, "http")) ); // 创建索引 - 请求对象 CreateIndexRequest request = new CreateIndexRequest("users"); // 发送请求,获取响应 CreateIndexResponse response = esClient.indices().create( request, RequestOptions.DEFAULT ); boolean acknowledged = response.isAcknowledged(); // 响应状态 System.out.println("操作状态 = " + acknowledged); esClient.close();

3.2.2)查看索引

// 查询索引 GetIndexRequest request = new GetIndexRequest("test"); // 发送请求,获取响应 GetIndexResponse response = client.indices().get( request, RequestOptions.DEFAULT ); System.out.println("表(索引)别称:" + response.getAliases()); System.out.println("映射mappings:" + response.getMappings()); System.out.println("设置settings:" + response.getSettings());

3.2.3)删除索引

// 删除索引 DeleteIndexRequest request = new DeleteIndexRequest("test"); // 发送请求,获取响应 AcknowledgedResponse response = client.indices().delete( request, RequestOptions.DEFAULT ); // 操作结果 System.out.println("操作结果:" + response.isAcknowledged());

3.3 文档操作

3.3.1)新增文档

// 新增文档 IndexRequest request = new IndexRequest(); // 设置索引及唯一性标识 request.index("user").id("1001"); // 创建数据 User user = new User(); user.setName("zhangsan"); user.setAge(18); user.setSex("man...."); ObjectMapper objectMapper = new ObjectMapper(); String productionJson = objectMapper.writeValueAsString(user); // 添加文档数据,数据格式为Json格式 request.source(productionJson, XContentType.JSON); // 客户端发送请求,获取响应对象 IndexResponse response = client.index(request, RequestOptions.DEFAULT);

3.3.2)修改文档

要修改多个字段,则如下语法

// 修改文档 - 请求对象 UpdateRequest request = new UpdateRequest(); // 配置修改参数 request.index("user").id("1001"); // 修改数据 request.doc(XContentType.JSON, "name", "张三", "sex", "nv"); // 客户端发送 UpdateResponse response = client.update(request, RequestOptions.DEFAULT);

3.3.3)查询文档

3.3.4)删除文档

3.3.5)批量操作

3.4 高级查询

3.4.1)请求体查询

3.4.2)高亮查询

3.4.3)聚合查询

http://www.jsqmd.com/news/1083293/

相关文章:

  • AMD Ryzen调试工具SMUDebugTool:解决处理器性能问题的完整指南
  • Beyond Compare 5 本地化密钥生成与激活完整指南
  • 微信记录手滑删除不用急!五大官方免费恢复教程,无备份也有兜底办法
  • IPv4 地址不是一串数字:从公网、私网到广播地址的完整地图
  • 三星手机通讯录迁移至 OPPO 手机完整方法
  • 如何永久掌控你的微信记忆:WeChatMsg本地数据管理终极指南
  • AI智能摄像头与智能门铃中的RV1106BG3:1TOPS瑞芯微视觉SoC应用解析
  • 手机号逆向查询QQ号:深度解析TEA加密算法的技术实现与架构设计
  • 人工智能和计算机科学与技术哪个更值得报
  • 告别枯燥词汇练习:词达人自动化助手如何帮你每周节省2小时
  • 企业GEO技术合规应用解析
  • 基于W55MH32的物联网RGB灯控系统设计与实现
  • 从电脑到互联网:IPv4 地址在真实通信中如何工作
  • 058、生成器即协程:yield、yield from、send、throw、close 的渐进理解
  • AI翻唱革命:零门槛打造专业级AI歌手,你的音乐创作新纪元
  • 2026商用AI快速开发工具对比:从低代码到Agent平台,企业该如何选型?
  • 用「继承来的祖传遗留系统」比喻,聊聊原生家庭的拧巴怎么消化
  • Windows系统下res-downloader证书配置:从零到精通的完整指南
  • 当“全灾种、大应急”遇上“虚拟仿真+AI”,应急救援人才智慧实训的时代飞跃
  • 什么是token?
  • 1.6 数据库相关面试题:
  • 【Springboot毕设全套源码+文档】基于SpringBoot的智能健身跟踪系统的设计与实现(丰富项目+远程调试+讲解+定制)
  • 【Springboot毕设全套源码+文档】基于SpringBoot的社区互助系统设计与实现(丰富项目+远程调试+讲解+定制)
  • 一线观察:长期体验长春知名汽车贴膜,看到的行业真实情况
  • 市面上知名的AI智能体软件哪家强
  • MCP、A2A、OpenAI Agents SDK:三大 Agent 协议深度拆解与选型避坑指南
  • 3分钟终极指南:如何使用zteOnu快速获取光猫超级管理员权限
  • 硕博写论文怕过不了盲审?Gradpaper 深度学术模型,适配学位论文 / 顶刊投稿标准
  • 四层板参考平面完整性设计规范与整改方案
  • 2026年品牌全案策划公司怎么选?广州瞳神文化传媒服务能力深度解析