ElasticSearch 入门学习

一、ElasticSearch定义

ElasticsSearch 是一个分布式的实时文档存储,每个字段 可以被索引与搜索也是一个分布式实时分析搜索引擎也是一个能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据。

二、ElasticSearch安装和启动

1.安装JAVA的JDK

安装ElasticSearch之前需要先下载对应的JDK。因为我是windows系统,所以提供windows下载地址:Java Downloads | Oracle

下载JDK最好下载9以上的版本,可以省略配置环境变量的步骤。

2.安装ElasticSearch

根据下载的JDK去支持一览表 | Elastic 网站对比可以下载的ElasticSearch版本。

对比完成后,去Download Elasticsearch | Elastic网站下载对应版本的压缩包即可。

3.ElasticSearch启动

找到ElasticSearch下载的根目录,进入bin目录 直接运行 elasticsearch.bat 即可

启动后可以打开浏览器访问http://localhost:9200 来实验是否启动成功。

4.ElasticSearch浏览器访问

ElasticSearch我下载的是8.11.4版本,启动之后,通过http://localhost:9200请求发现被拒绝,这是因为ElasticSearch默认是https请求,且需要用户名和密码。

解决方案:

1.找到ElasticSearch根目录,进入config目录中。

2.打开elasticsearch.yml 将里面所有为true的选项改为false即可。

设置完毕后再重新运行elasticsearch.bat 你会发现已经可以正常返回数据了。

三、ElasticSearch-Head 安装和启动

下载启动完elasticsearch后,我们可以用elasticsearch-head插件对集群、和数据的查询维护。

1.安装nodejs

下载node:

  • ① 下载地址:Node.js --- Download Node.js®

  • ② 检查是否安装成功:Win+R CMD输入"node -v"命令检查,如果输出了版本号,则node安装成功。

下载elasticsearch插件

当elasticsearch插件安装完成后,通过 ++npm run start++ 命令来启动。

但是启动后,我们elasticsearch集群状态一直是未连接!

这是因为elasticsearch拥有跨域的问题

解决方案:

1.找到ElasticSearch根目录,进入config目录中。

2.打开elasticsearch.yml

3.新增下面两行内容即可:

http.cors.enabled: true #是否支持跨域,默认为false
http.cors.allow-origin: "*" #当设置允许跨域,默认为*,表示支持所有域名

设置完成后,重启elasticsearch服务就能发现连接成功了!

四、ElasticSearch操作

我下载的ElasticSearch是8.11.4版本,版本不同部分操作命令也会不同,本此记录只针对8.11.4版本。

操作文档

(1)新建文档

请求方式:PUT

请求路由:127.0.0.1:9200/customer/_doc/1 //关键字是_doc [customer]指的是创建的索引名称 [1]指的是索引下文档ID

请求数据:{ "name": "John Doe" }

--批量新建文档

请求方式:POST

请求路由:127.0.0.1:9200/_bulk //关键字是 _bulk

请求数据:

{ "index" : { "_index" : "customer", "_id" : "1" } } //创建索引 和 文档 id

{ "name" : "张三" } //文档内容

{ "index" : { "_index" : "customer", "_id" : "2" } }

{ "name" : "李四", "age": 10 }

{ "index" : { "_index" : "customer", "_id" : "3" } }

{ "name" : "王五", "age": 11 }

注意:每行数据后面都要有换行符,如果是postman模拟,每行的后面最好加个空格再换行

(2)获取文档

请求方式:GET

请求路由:127.0.0.1:9200/customer/_doc/1 //关键字是_doc [customer]是指检索的索引名称 [1]是指检索的索引下的文档ID

请求数据:空

--获取文档列表

请求方式:GET

请求路由:127.0.0.1:9200/customer/_search //关键字是_search [customer]是指检索的索引名称

请求数据:空

--获取数据(有条件)

请求方式:GET、POST

请求路由:127.0.0.1:9200/customer/_search //关键字是_search [customer]是指检索的索引名称

请求参数:

复制代码
{
    "query": {         //筛选条件
        //"match_all": {} //获取所有
        //"match":{  // 匹配规则,match、term 均可
        //     "name":"张三"  //获取 "name" 为 "张三" 的数据
        //},
        "exists": {  //exists 和 (match_all、match) 不能共用
             "field": "age" //获取数据中存在 "age" 字段的文档         
        }
    },
    "_source": {     
         "includes": ["name"]  //只获取 name 字段   
    },
    "sort": [  //排序
        {
            "_id": {"order" : "asc"}  //根据 _id 进行升序查询
        }
    ],
    "from": 0,  //从第几个数据开始获取
    "size": 1   //获取几个数据
}

注意:当我们用上面的请求参数测试时,es会报错:

Fielddata access on the _id field is disallowed, you can re-enable it by updating the dynamic cluster setting: indices.id_field_data.enabled

这是因为es从6.0版本后,便默认不支持通过_id的值来进行操作了,如需操作这个值则需要修改es的配置

请求方式:PUT

请求路由:127.0.0.1:9200/_cluster/settings

请求数据:{ "transient": { "indices.id_field_data.enabled": true } }

(3)更新文档

请求方式: POST

请求路由:127.0.0.1:9200/customer/_update/1 //关键字是_update [customer]是指检索的索引名称 [1]是指检索的索引下的文档ID

请求数据:{ "name": "Bruce Doe" }

--批量更新文档

请求方式:POST

请求路由:127.0.0.1:9200/_bulk

请求数据:

{"update":{"_index":"customer", "_id":1}} //指定修改的索引和文档id

{"doc":{"name":"ES从入门到放弃"}} //指定修改的类型

{"update":{"_index":"customer", "_id":2}}

{"doc":{"name":"ES真好玩"}}

(4)删除文档

请求方式:DELETE

请求路由:127.0.0.1:9200/customer/_doc/1 //关键字是_doc [customer]是指检索的索引名称 [1]是指检索的索引下的文档ID

请求数据:空

--批量删除文档

请求方式:POST

请求路由:127.0.0.1:9200/_bulk

请求数据:

{"delete":{"_index":"customer", "_id":1}} //删除某个索引下的某个文档

{"delete":{"_index":"customer", "_id":3}}

相关推荐
许白掰1 小时前
【stm32】HAL库开发——CubeMX配置RTC,单片机工作模式和看门狗
stm32·单片机·嵌入式硬件·学习·实时音视频
future14121 小时前
C#学习日记
开发语言·学习·c#
DIY机器人工房2 小时前
0.96寸OLED显示屏 江协科技学习笔记(36个知识点)
笔记·科技·stm32·单片机·嵌入式硬件·学习·江协科技
我是小哪吒2.04 小时前
书籍推荐-《对抗机器学习:攻击面、防御机制与人工智能中的学习理论》
人工智能·深度学习·学习·机器学习·ai·语言模型·大模型
✎ ﹏梦醒͜ღ҉繁华落℘4 小时前
WPF学习(四)
学习·wpf
✎ ﹏梦醒͜ღ҉繁华落℘5 小时前
WPF学习(动画)
学习·wpf
循环过三天5 小时前
3-1 PID算法改进(积分部分)
笔记·stm32·单片机·学习·算法·pid
生如夏花℡6 小时前
HarmonyOS学习记录3
学习·ubuntu·harmonyos
之歆6 小时前
Python-封装和解构-set及操作-字典及操作-解析式生成器-内建函数迭代器-学习笔记
笔记·python·学习
幽络源小助理6 小时前
SpringBoot基于JavaWeb的城乡居民基本医疗信息管理系统
java·spring boot·学习