ES基础概念
[Elasticsearch Guide 7.15] | Elastic 文档
Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,是目前全文搜索引擎的首选。
mysql更适用于数据量小的CRUD,而Elasticsearch适用于大数据。
对ES的所有操作只需要使用rest请求即可完成
基础概念
- index 索引
- 动词:相当于insert
- 名词:相当于Database
- Type 类型
- 相当于Table
- Document 文档
- JSON格式,相当于表中的内容
倒排索引
- 分词:将整句拆分为单词
- 检索:查询词都出现在哪个记录当中
- 相关性得分:基于一定算法算哪个权重更高
Docker安装ES和可视化工具
安装
docker pull elasticsearch:7.4.2
docker pull kibana:7.4.2
配置
mkdir -p /mydata/elasticsearch/config
mkdir -p /mydata/elasticsearch/dataecho “http.host: 0.0.0.0” >> /mydata/elasticsearch/config/elasticsearch.yml
docker run –name elasticsearch -p 9200:9200 -p 9300:9300
-e “discovery.type=single-node”
-e ES_JAVA_OPTS=”-Xms64m -Xmx128m”
-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins
-d elasticsearch:7.4.2chmod -R 777 /mydata/elasticsearch/ 保证权限
docker run –name kibana -e ELASTICSEARCH_HOSTS=http://192.168.128.129:9200 -p 5601:5601
-d kibana:7.4.2
http://192.168.56.10:9200 为虚拟机地址
访问
访问不了的执行上述保证权限的命令
kibana可能要等一会才能启动,刷新就行
基础请求格式
查询 _cat
保存、更新文档
保存一个数据, 保存在哪个索引的哪个类型下, 指定用哪个唯一标识
在 customer 索引下的 external 类型下保存 1 号数据,数据使用JSON格式
PUT customer/external/1
{ “name”: “John Doe” }PUT 和 POST 都可以,POST 新增。
POST如果不指定 id, 会自动生成 id。如果指定 id (并且该id存在)就会修改这个数据, 并新增版本号。
PUT可以新增可以修改。PUT 必须指定 id; 由于 PUT 需要指定 id, 我们一般都用来做修改操作,不指定 id 会报错。
查询文档
GET /customer/external/1
更新文档 乐观锁
PUT /customer/external/1?if_seq_no=1&if_primary_term=1
{ “name”: “John Doe 1” }这里将if判断seq_no和primary_term
更新文档
POST customer/external/1/_update
{
“doc”:
{ “name”: “John Doew” }
}
PUT 操作和POST不带update,总会将数据重新保存并增加 version 版本;
POST 带_update,对比元数据如果一样就不进行任何操作,文档 version不增加对于大并发更新, 不带 update;
对于大并发查询偶尔更新, 带 update;
对比更新, 重新计算分配规则。
删除文档、索引
DELETE customer/external/1
DELETE customer
没有删除类型,新版本type不建议了
bulk 批量 API
POSTMAN里面测不了,去kibana -> dev tools
bulk API 以此按顺序执行所有的 action(动作) 。 如果一个单个的动作因任何原因而失败,它将继续处理它后面剩余的动作。 当 bulk API 返回时, 它将提供每个动作的状态(与发送的顺序相同) , 所以您可以检查是否一个指定的动作是不是失败了。
导入测试数据
感谢评论区,好人一生平安:es测试数据.json · 坐看云起时/common_content - Gitee.com
POST /bank/account/_bulk
进阶
SearchAPI
ES 支持两种基本方式检索 :
一个是通过使用 REST request URI 发送搜索参数(uri+检索参数)
另一个是通过使用 REST request body 来发送它们(uri+请求体)
QueryDSL
基本语法格式
返回特定字段
match 匹配查询
address.keyword 表示精确匹配,必须匹配为完整字段,如果使用match_phrase则匹配包含完整字段的即可
match_phrase 短语匹配
multi_match 多字段匹配
bool 复合查询
filter 结果过滤
must not、filter 不会计算相关性得分,must、should会
term
和 match 一样。 匹配某个属性的值。 全文检索字段用 match, 其他非 text 字段匹配用 term。
aggregations 执行聚合
聚合提供了从数据中分组和提取数据的能力。 最简单的聚合方法大致等于 SQL GROUP
BY 和 SQL 聚合函数。 在 Elasticsearch 中, 您有执行搜索返回 hits( 命中结果) , 并且同时返
回聚合结果, 把一个响应中的所有 hits( 命中结果) 分隔开的能力。 这是非常强大且有效的,
您可以执行查询和多个聚合, 并且在一次使用中得到各自的( 任何一个的) 返回结果, 使用
一次简洁和简化的 API 来避免网络往返。
Mapping
字段类型
映射
Mapping 是用来定义一个文档( document) , 以及它所包含的属性( field) 是如何存储和
索引的
分词
安装
即可访问linux的nginx
Elasticsearch-Rest-Client
官方RestClient,封装了ES操作
[Java High Level REST Client | Java REST Client 7.15] | Elastic