Elastic Search 的安装、使用方式
1.Elastic Search
elasticsearch是一款非常强大的开源搜索引擎,支持的功能非常多。数据库模糊查询随着表数据量的增多,查询性能的下降会非常明显,而搜索引擎的性能则不会随着数据增多而下降太多。目前仅10万不到的数据量差距就如此明显,如果数据量达到百万、千万、甚至上亿级别,这个性能差距会非常夸张。数据库的模糊搜索功能单一,匹配条件非常苛刻,必须恰好包含用户搜索的关键字。而在搜索引擎中,用户输入出现个别错字,或者用拼音搜索、同义词搜索都能正确匹配到数据。
-
Elasticsearch:用于数据存储、计算和搜索
-
Logstash/Beats:用于数据收集
-
Kibana:用于数据可视化
整套技术栈被称为ELK,经常用来做日志收集、系统监控和状态分析等等
2.es安装
在docker环境中拉取镜像,如果镜像拉取困难,我已经提供好了镜像tar包,可以直接下载
通过网盘分享的文件:kibana.tar等2个文件
链接: https://pan.baidu.com/s/15BwRa6wBfosRjeggmRzAvw?pwd=0218 提取码: 0218
执行命令
# 加载es镜像
docker load -i es.tar
# 加载kibana镜像
docker load -i kibana
创建容器
注意两个容器要处于同一个网络
# 创建es容器
docker run -d \--name es \-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \-e "discovery.type=single-node" \-v es-data:/usr/share/elasticsearch/data \-v es-plugins:/usr/share/elasticsearch/plugins \--privileged \--network net \ # 你的网络名称-p 9200:9200 \-p 9300:9300 \elasticsearch:7.12.1# 创建kibana容器
docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--network=net \ # 你的网络名称
-p 5601:5601 \
kibana:7.12.1
启动容器
docker start es
docker start kibana
kibana是es的可视化插件,它会自动代理到es的端口
浏览器访问 宿主机的5601端口
点击 Explorer on my own
点击 Dev tools
进入操作界面即可进行使用
3.使用方式
elastic是一款分布式搜索引擎,通过倒排索引的方式,可以优化复杂的条件查询的效率。我是使用的docker环境进行的部署es,首先就是要拉取es的镜像,以及图形化界面kibana的镜像,然后进行构建。在项目中引入相关依赖,就可以进行使用了
创建索引:
PUT /products
{"settings": { "number_of_shards": 1, "number_of_replicas": 0 },"mappings": {"properties": {"title": { "type": "keyword" },"price": { "type": "double" },"description": { "type": "text" }}}
}
查询与删除索引
-
GET /_cat/indices?v
查看所有索引。 -
DELETE /products
删除指定索引
添加文档:
POST /products/_doc/1 (指定id)
{ "title": "iphone13", "price": 8999.99 }
更新文档:
全量替换(PUT
)或局部更新(POST /_update
)
POST /products/_doc/1/_update
{ "doc": { "title": "iPhone15" } }
全文搜索(match)
适用于 text
类型字段,支持分词,类似 SQL 的 LIKE
操作
GET /article/_search
{"query": { "match": { "title": "ES教程" } }
}
精确匹配(term
)
针对 keyword
或数值类型字段,不进行分词
GET /order/_search
{"query": { "term": { "order_no": "20240315001" } }
}
范围查询(range
)
支持 gt
(>)、gte
(>=)、lt
(<)、lte
(<=)参数
GET /order/_search
{"query": { "range": { "price": { "gte": 100, "lte": 500 } } }
}
布尔组合查询(bool
)
通过 must
(AND)、should
(OR)、must_not
(NOT)组合条件
GET /order/_search
{"query": {"bool": {"must": [ { "term": { "status": "paid" } }, { "range": { "price": { "gte": 100 } } } ]}}
}
以上是es中几种简单的使用方式,同样es还支持更多更高级的用法,可详见
Elasticsearch:官方分布式搜索和分析引擎 | Elastic