抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

Hello world!

ES基础概念

[Elasticsearch Guide 7.15] | Elastic 文档

Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,是目前全文搜索引擎的首选。

mysql更适用于数据量小的CRUD,而Elasticsearch适用于大数据。

对ES的所有操作只需要使用rest请求即可完成

基础概念

  1. index 索引
    • 动词:相当于insert
    • 名词:相当于Database
  2. Type 类型
    • 相当于Table
  3. Document 文档
    • JSON格式,相当于表中的内容

image-20211031155240115

倒排索引

  1. 分词:将整句拆分为单词
  2. 检索:查询词都出现在哪个记录当中
  3. 相关性得分:基于一定算法算哪个权重更高

image-20211031155548529

Docker安装ES和可视化工具

安装

docker pull elasticsearch:7.4.2

docker pull kibana:7.4.2

配置

mkdir -p /mydata/elasticsearch/config
mkdir -p /mydata/elasticsearch/data

echo “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.2

chmod -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 为虚拟机地址

访问

http://192.168.128.129:9200/

访问不了的执行上述保证权限的命令

http://192.168.128.129:5601/

kibana可能要等一会才能启动,刷新就行

基础请求格式

查询 _cat

image-20211031163511553

保存、更新文档

保存一个数据, 保存在哪个索引的哪个类型下, 指定用哪个唯一标识

在 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

image-20211031164700095

更新文档 乐观锁

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

image-20211031170829231

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+请求体)

image-20211031173158137

image-20211031173256674

QueryDSL

基本语法格式

image-20211101130742684

image-20211101130856523

返回特定字段

image-20211101131305376

image-20211101131315986

match 匹配查询

image-20211101131428605

image-20211101131446139

address.keyword 表示精确匹配,必须匹配为完整字段,如果使用match_phrase则匹配包含完整字段的即可

match_phrase 短语匹配

image-20211101131702396

multi_match 多字段匹配

image-20211101131719772

bool 复合查询

image-20211101131740945

image-20211101131754764

image-20211101131805931

image-20211101131835764

image-20211101131845253

image-20211101131917270

image-20211101131900305

filter 结果过滤

must not、filter 不会计算相关性得分,must、should会

image-20211101132101270

term

和 match 一样。 匹配某个属性的值。 全文检索字段用 match, 其他非 text 字段匹配用 term。

image-20211101132126457

aggregations 执行聚合

聚合提供了从数据中分组和提取数据的能力。 最简单的聚合方法大致等于 SQL GROUP
BY 和 SQL 聚合函数。 在 Elasticsearch 中, 您有执行搜索返回 hits( 命中结果) , 并且同时返
回聚合结果, 把一个响应中的所有 hits( 命中结果) 分隔开的能力。 这是非常强大且有效的,
您可以执行查询和多个聚合, 并且在一次使用中得到各自的( 任何一个的) 返回结果, 使用
一次简洁和简化的 API 来避免网络往返。

Mapping

字段类型

image-20211101132703882

image-20211101132712276

映射

Mapping 是用来定义一个文档( document) , 以及它所包含的属性( field) 是如何存储和
索引的

分词

image-20211101135712278

安装

image-20211101141113680

http://192.168.128.129:80/

即可访问linux的nginx

Elasticsearch-Rest-Client

官方RestClient,封装了ES操作

[Java High Level REST Client | Java REST Client 7.15] | Elastic

评论




🧡💛💚💙💜🖤🤍