2018-12-27 · Develop

Elasticsearch 入门教程

Elasticsearch 简介

全文搜索属于最常见的需求,开源的 Elasticsearch (简称 Elastic 或者 ES)是目前全文搜索引擎的首选,也可以作为 NoSQL 数据库。
Elastic 的底层是开源库 Lucene。但是,你没法直接用 Lucene,必须自己写代码去调用它的接口。Elastic 是 Lucene 的封装,提供了 REST API 的操作接口,开箱即用。

安装 ES

ES 需要 Java 8 环境。安装完 Java 之后,就可以按照官方文档进行安装。

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.4.tar.gz
tar -xzf elasticsearch-6.5.4.tar.gz
cd elasticsearch-6.5.4/

默认情况下 ES 只允许本机访问,如果需要远程访问,需要修改 conf/elasticsearch.yml 配置文件

network.host: 0.0.0.0

新版本的 ES 不再支持使用 root 用户进行启动,所以创建好用户以及设置好权限之后

./bin/elasticsearch

如果一切正常的话,ES 会使用 9200 端口对外提供 RESTFul 访问功能, 9300 端口进行 ES 内部使用。访问 http://ip:9200 将会有如下的输出

{
    "name": "IbLuK9X",
    "cluster_name": "elasticsearch",
    "cluster_uuid": "EWDAJ4eZRtKBM38KSFopXA",
    "version": {
        "number": "6.5.4",
        "build_flavor": "default",
        "build_type": "tar",
        "build_hash": "d2ef93d",
        "build_date": "2018-12-17T21:17:40.758843Z",
        "build_snapshot": false,
        "lucene_version": "7.5.0",
        "minimum_wire_compatibility_version": "5.6.0",
        "minimum_index_compatibility_version": "5.0.0"
    },
    "tagline": "You Know, for Search"
}

name 是这台 ES 的名称。 cluster_name 是集群名称。 默认情况下 ES 对中文搜索的支持不够友好,需要安装额外的插件,官方推荐的插件是 Smartcn ,除了 Smartcn 外还有 ik 用的比较多。

./bin/elasticsearch-plugin install analysis-smartcn

ES 的基本概念

REST 访问 ES

ES 基于 RESTFul 接口进行访问,使用起来及其方便,主要的格式为

http://ip:port/{index}/{type}/{id}/[_search][_update][_source]?[pretty]

添加文档

elasticsearch-add

其中 lo 表示 Index , user 表示 Type , 数字 1 是文档的主键,主键可以是任何数据结构,没有指定主键, ES 会自动生成一个唯一的主键, pretty 是可选参数, ES 输出的时候会进行格式化输出,更加美观。如果数据是如下的格式, ES 将会自动解析为时间格式

根据主键修改

elasticsearch-update-by-id
除了使用 put 请求外,也可以使用 post 请求来更新部分数据
elasticsearch-update-by-id-use-post

根据主键删除

elasticsearch-delete

查询操作

查询是任何数据操作最难的部分,下面的例子很简单,如果你有很多特殊的查询需求,请阅读官方文档

elasticsearch-select-by-id

elasticsearch-select-by-match

elasticsearch-select-page

/_search # 搜索所有的库和表。
_all/user # 搜索所有库中的 user 表。
lo*/user # 符合模糊匹配的所有库的 user 表。
lo,lo1/user # 搜索 lo 库和 lo1 库中的 user 表。
_all/user,department # 搜索所有库中 user 表和 department 表。

参考文档
全文搜索引擎 Elasticsearch 入门教程
Elasticsearch Reference [6.5]