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 安装

  1. docker镜像下载命令: docker pull elasticsearch:5.6.8
  2. 安装es容器 : docker run -di --name=kkb_es -p 9200:9200 -p 9300:9300 elasticsearch:5.6.8
  3. 开启远程连接,先修改config目录下的配置 : vi elasticsearch.yml
    添加一行:cluster.name: my-elasticsearch
  4. 重启容器:docker restart kkb_es
  5. 跨域配置: 修改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

es的设计 es的概念_大数据


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>'

es的设计 es的概念_搜索引擎_02

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"
	}
	}
	}
}

es的设计 es的概念_大数据_03


es的设计 es的概念_elasticsearch_04

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许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时
搜索,稳定,可靠,快速,安装使用方便。"
}

es的设计 es的概念_java_05

4.2.6 修改文档document

POST 192.168.220.100:9200/blog1/article/1

{
"id":1,
"title":"【修改】ElasticSearch是一个基于Lucene的搜索服务器",
"content":"【修改】它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch
是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够
达到实时搜索,稳定,可靠,快速,安装使用方便。"
}

es的设计 es的概念_大数据_06

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 的实时数据变化。

安装

  1. docker pull docker.io/kibana:5.6.8
  2. 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":"李四来自湖北武汉!"
}