1. 环境搭建
参考指南:www.jianshu.com/p/72bd3a310…
文档:www.kuangstudy.com/bbs/1354069…
elasticsearch启动: bin目录下启动,启动命令:./elasticsearch,访问路径http://localhost:9200/
本地启动路径:/Users/jlgl/Documents/es/elasticsearch-7.6.1/bin
kibana安装, 启动命令:./Kibana ,访问路径:http://localhost:5601
本地启动路径:/Users/jlgl/Documents/es/kibana-7.6.1-darwin-x86_64/bin
elasticsearch-head idea项目启动:npm run start,访问http://localhost:9100就可以 我现在不用这个了,直接用google插件了
2. 概念解释
2.1 什么叫ES
开源的高扩展的分布式全文搜索和存储引擎 9300 端口为 Elasticsearch 集群间组件的通信端口, 9200 端口为浏览器访问的 http协议端口。
倒排索引强调的是关键字和文档编号的关联
使用Lucene作为其核心来实现所有索引和搜索的功能
Elasticsearch 是面向文档型数据库,一条数据在这里就是一个文档
ES 里的 Index 可以看做一个库,而 Types 相当于表, Documents 则相当于表的行。这里 Types 的概念已经被逐渐弱化, Elasticsearch 6.X 中,一个 index 下已经只能包含一个type, Elasticsearch 7.X 中, Type 的概念已经被删除了。
索引创建:http://127.0.0.1:9200/shopping 一定要是put请求,具有幂等性。post请求会报错
所有的索引查询:http://127.0.0.1:9200/_cat/indices?v _cat表示查询,用的是get,v表示展示创建的索引详情, 请求路径中的_cat 表示查看的意思, indices 表示索引
单个索引详情的查询 localhost:9200/shooping,get请求
在 Postman 中,向 ES 服务器发 DELETE 请求 : http://127.0.0.1:9200/shopping
全量修改和局部修改 http://127.0.0.1:9200/shopping/_doc/1 http://127.0.0.1:9200/shopping/_update/1
全量查询:http://127.0.0.1:9200/shopping/_search
2.2 ES 和solr的对比
1、 es基本是开箱即用(解压就可以用!) ,非常简单。Solr安装复杂!
2、Solr 利用Zookeeper进行分布式管理,而Elasticsearch自身带有分布式协调管理功能。
3、Solr 支持更多格式的数据,比如JSON、XML、 CSV ,而Elasticsearch仅支持json文件格式。
4、Solr 官方提供的功能更多,而Elasticsearch本身更注重于核心功能,高级功能多有第三方插件提供,例如图形化界面需要kibana友好支撑\ 5、Solr 查询快,但更新索引时慢(即插入删除慢) ,用于电商等查询多的应用;
- ES建立索引快(即查询慢) ,即实时性查询快,用于facebook新浪等搜索。
- Solr是传统搜索应用的有力解决方案,但Elasticsearch更适用于新兴的实时搜索应用。
6、Solr比较成熟,有一个更大,更成熟的用户、开发和贡献者社区,而Elasticsearch相对开发维护者较少,更新太快,学习使用成本较高。
2.3 本地安装es
本地安装地址: /Users/jlgl/Documents/es/elasticsearch-7.16.3
修改/Users/jlgl/Documents/es/elasticsearch-7.16.3/config/jvm.options
本地启动测试
采用谷歌插件chrome-extension://cpmmilfkofbeimbmgiclohpodggeheim/elasticsearch-head/index.html来实现可视化
2.3 本地安装kibana 以及汉化
kibana解压目录/config/kibana.yml,添加i18n.locale: "zh-CN"
直接启动发现
#! Elasticsearch built-in security features are not enabled. Without authentication, your cluster co
这个时候我们需要改变一下elaticsearch.yml, 添加xpack.security.enabled: false
2.4 es 安装插件 分词器
装在es这个目录下面了,ik分词器
/Users/jlgl/Documents/es/elasticsearch-7.6.1/plugins/ik
测试两种分词手段
GET _analyze
{
"analyzer": "ik_smart",
"text": "中国共产党"
}
GET _analyze
{
"analyzer": "ik_max_word",
"text": "中国共产党"
}
自己定义一些分词器
2.5 kibana 日常crud操作
创建一个索引
PUT /dyw_test_1
{
"mappings": {
"properties": {
"name":{
"type":"text"
},
"age":{
"type":"long"
},
"birthday":{
"type": "date"
}
}
}
}
查询一个索引信息
GET dyw_test_1
索引中插入一条信息
PUT dyw_test_1/_doc/1
{
"name": "dingyawu",
"age": 25,
"birthday": "2012-09-28"
}
修改一个索引的数据
POST dyw_test_1/_doc/1/_update
{
"doc":{
"name": "法外狂徒张三"
}
}
删除一个索引
DELETE dyw_test
查询一个索引
GET /dys_test_2/user/_search?q=name:李四
查询只返回固定的字段
GET /dys_test_2/user/_search
{
"query": {
"match": {
"name": "李四"
}
},
"_source": ["name", "desc"]
}
查询排序
GET /dys_test_2/user/_search
{
"query": {
"match": {
"name": "李四"
}
},
"sort": [
{
"age": {
"order": "desc"
}
}
],
"from": 0,
"size": 2
}
查询must 并的关系。should是or的关系
term: 查询精确的
match: 会使用分词器解析
GET /dys_test_2/user/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"name": "李四234"
}
},
{
"match": {
"age": 30
}
}
]
}
}
}
查询当中加入过滤的逻辑
GET /dys_test_2/user/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"name": "李四"
}
}
],
"filter": {
"range": {
"age": {
"lt": 31,
"gte": 26
}
}
}
}
}
}
看到第6章了