ElasticSearch 全文搜索
GuoJun 2022-10-18 ElasticSearch
# 简介
Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎。无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。 特点:
- 分布式的实时文件存储,每个字段都被索引并可被搜索
- 分布式的实时分析搜索引擎--做不规则查询
- 可以扩展到上百台服务器,处理PB级结构化或非结构化数据 Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。
ES能做什么?
全文检索(全部字段)、模糊查询(搜索)、数据分析(提供分析语法,例如聚合)
# 安装
- 下载镜像
docker pull elasticsearch7.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/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.4.2
## -e ES_JAVA_OPTS="-Xms64m -Xmx128m" 测试环境下设置ES的初始内存和最大内存,否则导致过大启动不了ES
- 查看日志
docker logs elasticsearch
- 安装Kibana
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://192.168.56.20:9200 -p 5601:5601 \
-d kibana:7.4.2
- 查看日志
docker logs kibana
- 访问可视化页面
http://192.168.56.20:5601/
# 初始检索
- _cat
GET /_cat/nodes 查看所有节点
GET /_cat/health 查看es健康状况
GET /_cat/master 查看主节点
GET /_cat/indices 查看所有索引
- 索引一个文档(保存)
保存一个数据,保存在哪个索引的哪个类型下,指定用哪个唯一标识
PUT customer/external/1 在custoemr索引下的external类型下保存1号数据为:
PUT customer/external/1
{
"name":"小明"
}
PUT和POST都可以
POST新增,如果不指定id,会自动生成id. 指定id就会修改这个数据,并新增版本号
PUT可以新增可以修改,PUT必须指定id,由于PUT需要指定id,我们一般都用来修改操作,不指定id会报错
- 查询文档
GET customer/external/1
结果:
{
"_index":"customer", //在哪个索引
"_typpe":"external", //在哪个类型
"_id":"1", //记录id
"_version":2, //版本号
"_seq_no":1, //并发控制字段,每次更新就会+1,用来做乐观锁
"_primary_term":1, //同上,主分片重新分配,如重启,就会变化
"found":true,
"_source":{
"name":"小明 "
}
}
- 更新文档
POST customer/external/1/_update
{
"doc":{
"name":"小明"
}
}
或者
POST customer/external/1
{
"name":"小明"
}
- 删除文档&索引
DELETE customer/external/1
DELETE customer
- bulk批量API
POST customer/external/_bulk
{"index":{"_id":"1"}}
{"name":"小明"}
{"index":{"_id":"2"}}
{"name":"小王"}
# 进阶检索
- SearchAPI ES支持两种基本方式检索:
- 一个是通过使用REST request URI 发送搜索参数(uri+检索参数)
- 另一个是通过REST request body 来发送它们(uri+请求体)
Query DSL
Mapping
分词 安装ik分词
// 1.下载ik分词
wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.4.2/elasticsearch-analysis-ik-7.4.2.zip
// 2. 进入/mydata/elasticsearch/plugins目录
cd /mydata/elasticsearch/plugins
// 3. 创建ik目录
mkdir ik
// 4. 解压elasticsearch-analysis-ik-7.4.2.zip
unzip elasticsearch-analysis-ik-7.4.2.zip
// 进入docker容器查看插件
docker exec -it 124 /bin/bash
cd bin
elasticsearch-plugin list