参考资料
感谢知乎上大数据梦想家分享的入门教程,很实用。教程地址:从 0 到 1 学习 elasticsearch ,这一篇就够了!(建议收藏)
Elasticsearch 是什么
Elasticsearch 简称 ES,是一个开源的高扩展的分布式全文检索引擎,可以近实时的存储、检索数据。ES 使用 Lucene 作为其核心来实现所有索引及搜索的功能,使用 RESTful API来隐藏 Lucene 的复杂性,从而使全文检索变得简单易用。
Elasticsearch 与 Solr 的比较
- ES 和 Solr 都基于 Lucene。
- ES 自带分布式协调管理功能,Solr 依赖 Zookeeper 进行分布式管理。
- ES 只支持 json 格式,Solr 支持 json、XML、CSV 等格式。
- ES 很多功能需要第三方插件支持,Solr 本身功能较为丰富。
- ES 建立索引快,适用于实时性较强的场景;Solr 查询较快,但是索引更新慢,适用于电商等查询较多的场景。
Elastisearch 安装及启动
从官网 Download Elasticsearch 根据平台选择对应的版本进行下载。下载完成后将下载压缩包文件拷贝到安装路径(~/.opt/elasticsearch)并解压,在该目录下新建 data 目录用于存储索引。
修改配置文件 $ES_HOME/config/elasticsearch.yml 文件:
1 | cluster.name: demo-elasticsearch |
修改 jvm.options 文件中的配置:
1 | -Xms1g |
据说 Elasticsearch 不允许使用 root 用户操作,需要新建 elsearch 用户组及 elsearch 用户进行集群的操作,但是我在 macOS 上直接使用 admin 账号操作没遇到什么问题,并且在 macOS 上新建用户组和用户和 Linux 上的命令不通用,所以跳过新建用户这一步。
启动 es:
1 | bin/elasticsearch |
启动之后,可以访问 http://localhost:9200 查看。如果没有关闭 xpack.security.http.ssl 配置的话,需要访问 https://localhost:9200。
这个页面会返回一些集群相关的信息:
1 | { |
Elasticsearch-head 安装
Elasticsearch-head 是 Elasticsearch 的一个开源的图形化界面,在 GitHub 上可以获取:https://github.com/mobz/elasticsearch-head。将源码克隆到本地,然后通过 npm 启动。
1 | cd elasticsearch-head |
因为跨域的原因,需要在 elasticsearch.yml 中增加相关的配置:
1 | http.cors.enabled: true |
修改配置后,重启 es,访问 http://localhost:9100,就能看到 es-head 页面了,可以查看索引和查询之类的功能。
kibana 安装
kibana 安装
kibana 可以将更友好的展示和分析 es 的数据。在 es 官网可以进行下载:https://www.elastic.co/cn/downloads/kibana,要注意的是,kibana 的版本需要和 es 的版本保持一致。
下载后放到指定路径 ~/.opt/kibana 并解压。
修改配置文件:~/.opt/kibana/config/kibana.yml:
1 | server.port: 5601 |
通过 bin/kibana 启动 kibana。
访问 http://localhost:5601 访问 kibana 页面。
ik 分词器安装
原下载地址:https://github.com/infinilabs/analysis-ik/releases,但是最新版本已不在 GitHub 更新,需要到 https://release.infinilabs.com/analysis-ik/stable/ 进行下载。
下载后拷贝到 $ES_HOME/plugins/ik 路径下,重启 kibana。
测试分词器(最少切分):梦想家
1 | GET _analyze |
最细粒度切分:梦想家、梦想、想家
1 | GET _analyze |
分词器自定义词典:
在 $ES_HOME/plugins/ik/config 路径下新建文件 my.dic,写入需要被识别成一个词的词。
修改 IKAnalyzer.cfg.xml 文件:
1 | <properties> |
修改完成保存并重启 es,此时 my.dic 中的词就不会再被切分。
Elasticsearch 基本操作
创建文档:
1 | PUT /test1/_doc/1 |
创建成功后可在 es-head 页面浏览数据标签页中看到对应的索引 test1。
创建索引并指定字段类型:
1 | PUT /test2 |
查看刚才创建的索引:
GET /test2
向该索引增加数据:
1 | PUT /test2/_doc/1 |
查看文档信息:
1 | GET /test2/_doc/1 |
修改文档:
1 | PUT /test2/_update/1 |
修改文档也可以使用和新增同样的方式进行,但是会覆盖元来的数据,不推荐使用。
删除文档:
1 | DELETE /test2/_doc/1 |
删除索引:
1 | DELETE /test2 |
查找
先增加几条测试数据:
1 | PUT /demo/_doc/1 |
按 name 查找,返回 name、age、desc 列,结果按 age 升序排序,从第二个结果开始返回1个结果:
1 | GET /demo/_search |
OR:
1 | GET /demo/_search |
AND:
1 | GET /demo/_search |
按多个值查找:
1 | GET /demo/_search |
text 字段在查找时会被先被分词然后再进行查找,keyword 类型的字段会进行精确查找,不会被分词。
对结果进行高亮显示:
1 | GET /demo/_search |
关于分词:
- term:不经过分词,直接查询精确的值
- match:会使用分词器解析
1 | GET /demo/_search |
查看健康信息
1 | GET _cat/health |
1 | GET _cat/indicies?v |