ElasticSearch第一章笔记
一、什么是ElasticSearch
- ElasticSearch是一个基于lucene的全文检索服务器。和solr是同类产品,底层都是lucene。
二、ES的安装
-
安装ES的服务
1)下载 -》https://www.elastic.co/cn/elasticsearch
2)安装jdk,要求jdk应该是1.8以上版本,因为lucene5.0版本以后就需要jdk 1.8以后
3)解压缩
4)双击启动 elasticsearch.bat文件
ES使用了两个端口:
-
9200:http协议,restful api
-
9300:tcp协议,使用java客户端使用9300端口连接
ES服务不提供图形工具。
-
-
安装ES的客户端
1)第三方客户端:
headmaster:方便浏览器数据,查看节点信息。
-
可以是插件形式
-
也可以是独立的服务形式
-
安装步骤:
1)解压缩
2)headmaster是使用 node.js 开发
3)安装node.js
4)安装grunt
-
npm install -g grunt-cli
-
npm install
5)启动
-
grunt install
-
-
在elasticsearch.yml配置文件中添加如下信息,允许跨域访问:
http.cors.enabled: true http.cors.allow-origin: "*"
-
重启ES服务
postman:
- restful api测试工具。
- 测试http请求,并不是专用的ES客户端,一般使用postman调用的es的api
-
三、索引库管理
-
ES中的概念说明
-
Relational DB(mysql,oracle) -> Databases -> Tables -> Rows -> Columns
-
ElasticSearch -> Indices -> Types -> Documents -> Fields
-
-
创建索引库
1)使用headmaster创建
直接使用"新建索引"按钮创建索引库即可。
2)使用restful api创建
-
restful是一种风格不是标准也不是协议。本质上就是对http协议的诠释。把互联网上所有的内容都看做是资源。
-
资源定位
1:通过多级路径定位到资源 2:http://www.jd.com/article/text/1 3:url中没有参数也没有后缀
-
资源操作
使用不同的http方法实现不同的动作 增:PUT(ES)、POST 删:DELETE 改:PUT、POST(ES) 查:GET
-
url:
http://localhost:9200/{索引库的名称} -
方法(PUT)
-
-
3、设置mapping信息
1)创建索引库同事设置mapping信息
-
url
- http://localhost:9200/{索引库名称}
-
方法(PUT)
-
请求体
-
{ "mappings":{ "type01":{ "properties":{ "id":{ "type":"long", "store":"true" }, "name":{ "type":"text", "store":"true", "analyzer":"standard" }, "address":{ "type":"text", "store":"true", "analyzer":"standard" } } } } }
- 先创建索引库然后设置mapping
-
定位到type
- url: http://local:9200/{index}/_mappings
-
方法(POST)
-
请求体:
-
{ "type01":{ "properties":{ "id":{ "type":"long", "store":"true" }, "title":{ "type":"text", "store":"true", "analyzer":"ik_max_word" }, "content":{ "type":"text", "store":"true", "analyzer":"ik_max_word" } } } }
-
4、删除索引库
- 使用headmaster删除
- 使用动作-》删除-》输入“删除”-》确定
- 使用restful api删除
- url定位资源:http://localhost:9200/{索引库名称}
- 方法:DELETE
-
四、文档管理
-
添加文档
-
定位到资源:
- http://localhost:9200/{index}/{type}/{_id}
- _id:是文档的id
-
方法:(PUT,POST)
-
请求体:
-
json数据格式 { "id":1, "name","张三", "address":"北京天安门" }
-
-
如果使用post方法添加文档,可以不设置文档的id,es会自动生成一个id
-
一般情况下推荐_id和id字段的值保持一致
-
-
修改文档
-
先删除后添加,修改的方法和添加节点方法相同
-
url: http://localhost:9200/{index}/{type}/{_id}
-
方法:POST
-
请求体:
-
修改结果对应的文档 { "id":1, "name":"张三", "address":"北京天安门" }
-
-
-
删除文档
- url: http://localhost:9200/{index}/{type}/{_id}
- 方法: DELETE
五、文档的查询
-
使用headmaster查询
- 使用数据过滤功能
- 使用简单查询功能:
- 根据id查询
- 根据term查询:
- 关键就是一个term。包含两部分内容
- 关键字本身
- 根据query_string查询
- 先分词然后在进行查询
-
使用restful api查询文档
-
根据id查询
- 定位到资源:http://localhost:9200/{index}/{type}/{_id}
- 方法: GET
-
根据term查询
-
url: http://localhost:9200/{index}/{type}/_search
-
方法:POST
-
请求体:
-
查询条件:使用json格式表示 { "query":{ "term":{ "name":"米" } } }
-
-
-
使用query_string查询
-
url: http://localhost:9200/{index}/{type}/_search
-
方法: POST
-
请求体:
-
{ "query":{ "query_string":{ "query":"你爱吃大米还是小米", "default_field":"name" } } }
-
-
lucene中QueryParser,带分析的查询。
-
-
六、中文分词器
- 使用IKAnalyzer
- 是使用插件形式安装到ES中,需要先下载 IKAnalyzer的ES插件。
- https://github.com/medcl/elasticsearch-analysis-ik/releases
- 安装方法
- 下载IK的ES插件
- 解压缩
- 把解压之后的文件夹复制到es的plugins目录下。
- 重启ES服务即可
- 是使用插件形式安装到ES中,需要先下载 IKAnalyzer的ES插件。
- 分词器的测试
- 可以通过一个url测试分词器的分词效果:
- 使用get方法即可:
- http://localhost:9200/_analyze?analyzer=standar&text=我是程序员
- ik分词器的名称:
- ik_smart: 快速分词
- ik_max_word: 最细粒度分词
- 可以通过一个url测试分词器的分词效果:
- 使用中文分词器
- 设置mapping时指定使用中文分词器。
七、小结
- es的安装
- es服务的安装。
- es的客户端:
- headmaster : node.js开发
- postman: 测试restful的工具。
- 索引库的管理
- 创建索引库
- 可以使用headmaster,可以使用postman(api)
- 索引库设置mappings信息
- 创建索引库同事设置mapping,先创建在设置mapping
- 删除索引库
- 直接在headmaster中删除,使用api删除
- api的思路:
- 定位到资源,使用不同的方法操作资源。
- 创建索引库
- 文档的管理
- 添加文档: put
- 修改文档: post
- 删除文档: delete
- 查询文档
- 根据id查询
- 根据查询条件查询
- 使用term查询:需要指定一个关键词以及查询的字段
- 使用query_string查询:指定查询条件可以是一句话,先分词然后基于分词之后的结果查询。
八、ElasticSearch集群
- 集群的特点
- 节点和节点之间是互相通信的。没有集群管理员。
- 连接集群中只需要连接到集群中的任意节点即可。
- 集群中有一个唯一的名称cluster.name
- 集群中的节点数量没有限制。一个节点当做集群看待。
- 集群的相关概念
- cluster:代表是一个集群
- node:节点。每个ES实例代表一个节点。
- shards:把一个索引分词多份。每份是一片,每片存储的内容量
- replicas:复制可以有0个或者多个。如果有一个复制代表每片都一个备份片。
- 从片和主片不能放在同一个节点上。
- 搭建集群
- 搭建一个三节点的集群。在一台服务器创建三个节点,端口不能相同。
- 9201-9203
- 9301-9303
- 步骤:
- 创建三个es实例,把单机版的实例复制三份。
- 需要删除节点的数据,保证节点是一个干净的节点。
- 修改配置文件
- 集群的名称
- 节点的名称
- 服务的端口号
- 集群中的节点列表
- 启动每个实例。
- 搭建一个三节点的集群。在一台服务器创建三个节点,端口不能相同。