2.1 什么是ElasticSearch
Elaticsearch,简称为es, es是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。es也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。
3.ElasticSearch相关概念(术语)
3.1 概述
Elasticsearch是面向文档(document oriented)的,这意味着它可以存储整个对象或文档(document)。然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。在Elasticsearch中,你可以对文档(而非成行成列的数据)进行索引、搜索、排序、过滤。Elasticsearch比传统关系型数据库如下:
Relational DB -> Databases -> Tables -> Rows -> Columns
Elasticsearch -> Indices -> Types -> Documents -> Fields
3.2 Elasticsearch核心概念
3.2.1 索引 index
一个索引就是一个拥有几分相似特征的文档的集合。
3.2.2 类型 type
在一个索引中,你可以定义一种或多种类型。一个类型是你的索引的一个逻辑上的分类/分区,其语义完全由你来定。
3.2.3 字段Field
相当于是数据表的字段,对文档数据根据不同属性进行的分类标识
3.2.4 映射 mapping ***
mapping是处理数据的方式和规则方面做一些限制,如某个字段的数据类型、默认值、分析器、是否被索引等等,这些都是映射里面可以设置的,其它就是处理es里面数据的一些使用规则设置也叫做映射,按着最优规则处理数据对性能提高很大,因此才需要建立映射
3.2.5 文档 document
一个文档是一个可被索引的基础信息单元。
3.2.6 接近实时 NRT
Elasticsearch是一个接近实时的搜索平台。
3.2.7 集群 cluster
一个集群就是由一个或多个节点组织在一起,它们共同持有整个的数据,并一起提供索引和搜索功能。
3.2.8 节点 node
一个节点是集群中的一个服务器,作为集群的一部分,它存储数据,参与集群的索引和搜索功能。
3.2.9 分片和复制 shards&replicas
一个索引可以存储超出单个结点硬件限制的大量数据。
四、Elasticsearch 安装
- docker镜像下载命令: docker pull elasticsearch:5.6.8
- 安装es容器 : docker run -di --name=kkb_es -p 9200:9200 -p 9300:9300 elasticsearch:5.6.8
- 开启远程连接,先修改config目录下的配置 : vi elasticsearch.yml
添加一行:cluster.name: my-elasticsearch - 重启容器:docker restart kkb_es
- 跨域配置: 修改elasticsearch/config下的配置文件:elasticsearch.yml,增加以下命令,并重启
http.cors.enabled: true
http.cors.allow-origin: “*”
network.host: 192.168.220.100
5.1 elasticsearch-head
ElasticSearch不同于Solr自带图形化界面,我们可以通过安装ElasticSearch的head插件,完成图形化界面的效果,完成索引数据的查看。
1)下载head插件:https://github.com/mobz/elasticsearch-head
2)将elasticsearch-head-master压缩包解压到任意目录,但是要和elasticsearch的安装目录区别开
3)下载nodejs:https://nodejs.org/en/download/
4)将grunt安装为全局命令 ,Grunt是基于Node.js的项目构建工具,cmd执行:cnpm install -g grunt-cli
6)进入elasticsearch-head-master目录启动head,在命令提示符下输入命令:
npm install
grunt server
7)打开浏览器,输入 http://localhost:9100,就成功了
5.2 使用Postman工具进行Restful接口访问
curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>'
4.2.2 创建索引index和映射mapping
PUT 192.168.202.100:9200/blog1
请求体:
{
"mappings": {
"article": {
"properties": {
"id": {
"type": "long",
"store": true,
"index":"not_analyzed"
},
"title": {
"type": "text",
"store": true,
"index":"analyzed",
"analyzer":"standard"
},
"content": {
"type": "text",
"store": true,
"index":"analyzed",
"analyzer":"standard"
}
}
}
}
4.2.3 创建索引后设置Mapping
POST http://192.168.220.100:9200/blog2/hello/_mapping
{
"hello": {
"properties": {
"id":{
"type":"long",
"store":true
},
"title":{
"type":"text",
"store":true,
"index":true,
"analyzer":"standard"
},
"content":{
"type":"text",
"store":true,
"index":true,
"analyzer":"standard"
}
}
}
}
4.2.4 删除索引index
DELETE 192.168.220.100:9200/blog1
4.2.5 创建文档document
POST 192.168.220.100:9200/blog1/article/1
{
"id":1,
"title":"ElasticSearch是一个基于Lucene的搜索服务器",
"content":"它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java
开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时
搜索,稳定,可靠,快速,安装使用方便。"
}
4.2.6 修改文档document
POST 192.168.220.100:9200/blog1/article/1
{
"id":1,
"title":"【修改】ElasticSearch是一个基于Lucene的搜索服务器",
"content":"【修改】它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch
是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够
达到实时搜索,稳定,可靠,快速,安装使用方便。"
}
4.2.8 查询文档-根据id查询
GET 192.168.220.100:9200/blog1/article/1
4.2.9 查询文档-querystring查询
POST 192.168.220.100:9200/blog1/article/_search
{
"query": {
"query_string": {
"default_field": "title",
"query": "搜索服务器"
}
}
}
4.2.10 查询文档-term查询
POST 192.168.220.100:9200/blog1/article/_search
{
"query": {
"term": {
"title": "搜索"
}
}
}
六6.1 IK分词器简介
IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。
1)采用了特有的“正向迭代最细粒度切分算法“,具有60万字/秒的高速处理能力。
2)采用了多子处理器分析模式,支持:英文字母(IP地址、Email、URL)、数字(日期,常用中文数量词,罗马数字,科学计数法),中文词汇(姓名、地名处理)等分词处理。
3)对中英联合支持不是很好,在这方面的处理比较麻烦.需再做一次查询,同时是支持个人词条的优化的词典存储,更小的内存占用。
4)支持用户词典扩展定义。
6.2 IK分词器安装
(1)安装ik分词器
IK分词器下载地址https://github.com/medcl/elasticsearch-analysis-ik/releases
unzip elasticsearch-analysis-ik-5.6.8.zip
将ik目录拷贝到docker容器的plugins目录下
docker cp ./ik kkb_es:/usr/share/elasticsearch/plugins
(2)IK分词器测试
访问: http://192.168.211.132:9200/_analyze?analyzer=ik_smart&pretty=true&text=我是程序员
七、Kibana使用-掌握DSL语句
我们上面使用的是elasticsearch-head插件实现数据查找的,但是elasticsearch-head的功能比较单一,我们这里需要一个更专业的工具实现对日志的实时分析,也就是kibana。
Kibana 可以使大数据通俗易懂。它很简单,基于浏览器的界面便于您快速创建和分享动态数据仪表板来追踪Elasticsearch 的实时数据变化。
安装
- docker pull docker.io/kibana:5.6.8
- docker run -it -d -e ELASTICSEARCH_URL=http://192.168.220.100:9200 --name kibana -p 5601:5601 kibana:5.6.8
索引操作
(1)查询所有索引
GET /_cat/indices?v
(2)删除某个索引
DELETE /skuinfo
(3)新增索引
PUT /user
(4)创建映射
PUT /user/userinfo/_mapping
{
"properties": {
"name":{
"type": "text",
"analyzer": "ik_smart",
"search_analyzer": "ik_smart"
},
"city":{
"type": "text",
"analyzer": "ik_smart",
"search_analyzer": "ik_smart"
},
"age":{
"type": "long"
},
"description":{
"type": "text",
"analyzer": "ik_smart",
"search_analyzer": "ik_smart"
}
}
}
(5)新增文档数据
PUT /user/userinfo/1
{
"name":"李四",
"age":22,
"city":"深圳",
"description":"李四来自湖北武汉!"
}