Elasticsearch安装
下载软件
Elasticsearch 的官方地址:Elastic --- 搜索 AI 公司 | Elastic
Elasticsearch 最新的版本是 8.16.1(截止2024.11),我们选择7.8.0版本。
下载地址:Elasticsearch 7.8.0 | Elastic
Elasticsearch 分为Linux和 Windows版本,基于我目前主要学习的是Elasticsearch的 Java客户端的使用,所以使用的是安装较为简便的 Windows 版本。
解压安装包后显示如下内容
|---------|-----------|
| 目录 | 含义 |
| bin | 可执行脚本目录 |
| config | 配置目录 |
| jdk | 内置 JDK 目求 |
| lib | 类库 |
| logs | 日志目录 |
| modules | 模块目录 |
| plugins | 插件目录 |
bin目录下双击elasticsearch.bat启动elasticsearch显示黑色窗口
注意:9300 端口为 Elasticsearch 集群间组件的通信端口,9200 端口为浏览器访问的 http协议 RESTful 端口。
打开浏览器,访问localhost:9200,测试结果
问题解决
-
Elasticsearch 是使用java开发的,且 7.8版本的ES 需要JDK版本 1.8以上,默认安装包带有jdk环境,如果系统配置 JAVA HOME,那么使用系统默认的JDK,如果没有配置使用自带的 JDK,一般建议使用系统配置的 JDK。
-
双击启动窗口闪退,通过路径访问追踪错误,如果是"空间不足",请修改config/ivm.options 配置文件
#设置 JVM 初始内存为1G。此值可以设置与-Xmx 相同,以避免每次垃圾回收完成后JVM 重新分配内存 Xms represents the initial size of total heap space #设置 JVM 最大可用内存为1G Xmx represents the maximum size of total heap space -Xmslg -Xmxlg
Elasticsearch 基本操作
Postman
如果直接通过浏览器向 Elasticsearch服务器发请求,那么需要在发送的请求中包含HTTP 标准的方法,而 HTTP 的大部分特性且仅支持 GET和POST 方法。所以为了能方便地进行客户端的访问,可以使用 Postman 软件
Postman 是一款强大的网页调试工具,提供功能强大的 WebAPI 和 HTTP 请求调试。软件功能强大,界面简洁明晰、操作方便快捷,设计得很人性化。Postman 中文版能够发送任何类型的 HTTP 请求(GET,HEAD,POST,PUT.),不仅能够表单提交,且可以附带任意类型请求体。
Postman 官网::Postman: The World's Leading API Platform | Sign Up for Free
下载地址:Download Postman | Get Started for Free
数据格式
Elasticsearch 是面向文档型数据库,一条数据在这里就是一个文档。为了方便大家理解,我们将 Elasticsearch 里存储文档数据和关系型数据库 MySQL,存储数据的概念进行一个类比
|---------------|----------------|-----------|---------------|------------|
| Elasticsearch | Index(索引) | Types(类型) | Documents(文档) | Fields(字段) |
| MySQL | Databases(数据库) | Table(表) | Row(行) | Column(列) |
ES 里的Index可以看做一个库,而 Types 相当于表,Documents 则相当于表的行。这里 Types 的概念已经被逐渐弱化,Elasticsearch6.X中,一个index下已经只能包含一个type,Elasticsearch7.X中,Type 的概念已经被删除了。
倒排索引:倒排表以字或词为关键字进行索引,表中关键字所对应的记录表项记录了出现这个字或词的所有文档,一个表项就是一个字表段,它记录该文档的ID和字符在该文档中出现的位置情况。
正排(正向)索引:正排表是以文档的ID为关键字,表中记录文档中每个字的位置信息,查找时扫描表中每个文档中字的信息直到找出所有包含查询关键字的文档。
索引操作
- 创建索引
对比关系型数据库,创建索引就等同于创建数据库
在 Postman 中,向ES 服务器发 PUT请求 :http://127.0.0.1:9200/shopping(HTTP协议中,PUT请求方法用于向服务器上传新的资源或更新已有资源。PUT请求会将请求的主体部分存储在服务器上指定的URL处,如果URL不存在,则会创建新的资源;如果URL已经存在,则会使用请求的主体部分替换原有资源。)![](https://i-blog.csdnimg.cn/direct/430c1a59624844a5842b8b3e6223d917.png)
PUT请求是具有幂等性的,即对于同一个URL的多个PUT请求,服务器处理的结果应该是一致的,不会因为请求的次数不同而导致资源状态的改变。
- 索引查询
在 Postman 中,向ES 服务器发 GET请求 :http://127.0.0.1:9200/shopping(向指定的资源发出请求,请求参数以查询字符串的形式发送到服务器。由于**请求参数以查询字符串的形式附加在 URL 上**,因此传输数据量受到 URL 长度的限制,通常不能超过 2048 个字。由于请求参数暴露在 URL 中,可能会被保存在日志、浏览器历史记录等地方,因此在涉及敏感数据传输时需要注意安全性。由于 GET 请求不会对服务器端数据做出任何修改,因此可以无限次重复请求而不会对服务器产生影响。)
- 索引删除
在 Postman 中,向ES 服务器发 DELETE请求 :http://127.0.0.1:9200/shopping(DELETE请求用于删除资源,删除指定的资源。DELETE请求是幂等的:即无论对同一个资源发送多少次DELETE请求,结果都是一样的,资源被删除。DELETE请求是安全的:DELETE请求只是删除指定的资源,并不会对服务器上的其他资源产生影响。)![](https://i-blog.csdnimg.cn/direct/acb768894ac843cba6b9700750326ea0.png)
文档操作
- 创建文档
索引已经创建好了,接下来我们来创建文档,并添加数据。这里的文档可以类比为关系型数据库中的表数据,添加的数据格式为JSON格式在 Postan 中
向ES 服务器发 POST请求 :http://127.0.0.1:9200/shoppinng/_doc(向指定的资源提交数据进行处理请求(例如提交表单或上传文件),请求参数保存在请求体中。由于请求参数保存在请求体中,因此理论上不受数据大小限制。但是在实际应用中,服务器通常会限制 POST 请求的数据大小。由于请求参数保存在请求体中,相对于 GET 请求,POST 请求传输的数据更加安全**。**由于 POST 请求可能会对服务器端数据进行修改,因此不能无限次重复请求,否则可能会对服务器产生负面影响。)
请求体内容为:
{
"title":"小米手机",
"category":"小米",
"images":"http://www.gulixueyuan.com/xm.jpg",
"price":3999.00
}
- 主键查询
在 Postman 中,向ES 服务器发 GET请求 :http://127.0.0.1:9200/shopping/_doc/主键![](https://i-blog.csdnimg.cn/direct/315c38c4cf0f4df18ec15867b54ae737.png)
- 全量查询
在 Postman 中,向ES 服务器发 GET请求 :http://127.0.0.1:9200/shopping/_search![](https://i-blog.csdnimg.cn/direct/4ecaafeede7c4425a0454f7e7f444dab.png)
- 全量修改
在 Postman 中,向ES 服务器发 PUT请求 :http://127.0.0.1:9200/shopping/_doc/主键(将修改部分添加到请求体Body)![](https://i-blog.csdnimg.cn/direct/f22c61a4af79425896826dc656f74e9e.png)
- 局部修改
向ES 服务器发 POST请求 :http://127.0.0.1:9200/shoppinng/_update/主键(将修改部分添加到请求体Body)![](https://i-blog.csdnimg.cn/direct/d96ccf543c3c4483b57f605f5895eae6.png)
- 文档删除
向ES 服务器发 DELETE请求 :http://127.0.0.1:9200/shoppinng/_doc/主键![](https://i-blog.csdnimg.cn/direct/146d0b98df3b4b13bf305cec846de9bb.png)
- 条件查询
向ES 服务器发 GET请求 :http://127.0.0.1:9200/shoppinng/_search?q=查询条件
向ES 服务器发POST请求 :http://127.0.0.1:9200/shoppinng/_search在请求体中添加查询条件
{
"query" : {
"match" : {
"category" : "小米"
}
}
}
- 分页查询
向ES 服务器发POST请求 :http://127.0.0.1:9200/shoppinng/_search在请求体中添加查询条件
{
"query" : {
"match_all" : {
}
},
#从第几个开始
"from" : 0,
#每一页查几个
"size" : 1
}
- 查询排序
向ES 服务器发POST请求 :http://127.0.0.1:9200/shoppinng/_search在请求体中添加查询条件
{
"query" : {
"match_all" : {
}
},
#从第几个开始
"from" : 0,
#每一页查几个
"size" : 1
#筛选查询,只查询选定字段
"_source" : ["title"],
#排序
"sort" : {
#以哪个字段排序
"price" : {
#升序降序
"order" : "desc"
}
}
}
- 多条件查询
向ES 服务器发POST请求 :http://127.0.0.1:9200/shoppinng/_search在请求体中添加查询条件
{
"query" : {
#表示条件查询的意思
"bool" : {
#表示多个条件同时成立,[]表示集合
"must" : [
{
"match" : {
"category" : "小米"
}
},
{
"match" : {
"price" : "小米"
}
}
]
}
}
}
{
"query" : {
"bool" : {
"should" : [
{
"match" : {
"category" : "小米"
}
},
{
"match" : {
"category" : "华为"
}
}
]
}
}
}
- 范围查询
向ES 服务器发POST请求 :http://127.0.0.1:9200/shoppinng/_search在请求体中添加查询条件
{
"query" : {
"bool" : {
"should" : [
{
"match" : {
"category" : "小米"
}
},
{
"match" : {
"category" : "华为"
}
}
],
#过滤
"filter" : {
#以那个字段过滤
"range" : {
"price" :{
#大于
"gt" : 5000
}
}
}
}
}
}
- 完全匹配&高亮查询
向ES 服务器发POST请求 :http://127.0.0.1:9200/shoppinng/_search在请求体中添加查询条件
{
"query" : {
#完全匹配
"match_phrase" : {
"category" : "小米"
}
},
#高亮显示
"highlight" : {
#多字段域,固定写法,指定那些字段高亮
"fields" : {
"category" : {}
}
}
}
- 聚合查询
向ES 服务器发POST请求 :http://127.0.0.1:9200/shoppinng/_search在请求体中添加查询条件
{
#聚合操作
"aggs" : {
#名称随意取
"price_group" : {
#分组
"terms" : {
#分组字段
"field" : "price"
}
}
},
#不用原始数据
"size" : 0
}
- 映射关系
向ES 服务器发put请求 :http://127.0.0.1:9200/user/_mapping
{
"properties" : {
"name" : {
#当一个字段需要用于全文搜索(会被分词), 比如产品名称、产品描述信息, 就应该使用text类型.
"type" : "text",
#如果这个字段index设置为true,那么我们搜索的时候搜索'es'也可以搜索到这个字段所在的文档
"index": true
},
"sex" : {
# 当一个字段需要按照精确值进行过滤、排序、聚合等操作时, 就应该使用keyword类型.
"type" : "keyword",
"index" :true
},
"tel" : {
"type" :"keyword",
#如果这个字段index设置为false,那么我们搜索的时候搜索'es'不可以搜索到这个字段所在的文档
"index": false
}
}
}