ElasticSearch+LogStash
ElasticSearch介绍
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。ElasticSearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
elasticsearch是一个基于Lucene的高扩展的分布式搜索服务器,支持开箱即用。
elasticsearch隐藏了Lucene的复杂性,对外提供Restful 接口来操作索引、搜索。
突出优点:
1、扩展性好,可部署上百台服务器集群,处理PB级数据。
2、近实时的去索引数据、搜索数据。
ElasticSearch安装
安装
支持Window(推荐使用zip安装方式)、docker安装方式(后续更新),本文使用Window安装方式。
- 下载并解压Elasticsearch 6.2.1.zip
百度网盘链接: 点击此处,提取码:3ujq
- 目录结构介绍
bin:脚本目录,包括:启动、停止等可执行脚本
config:配置文件目录
data:索引目录,存放索引文件的地方
logs:日志目录
modules:模块目录,包括了es的功能模块
plugins :插件目录,es支持插件机制
配置文件
-
elasticsearch.yml(主要)
作用:用于配置Elasticsearch运行参数
内容:cluster.name: xuecheng #集群名称 node.name: xc_node_1 #节点名 network.host: 0.0.0.0 #ip http.port: 9200 #配http的端口 transport.tcp.port: 9300 #es内部通讯的端口 node.master: true #是否为主节点,true为是,false为否 node.data: true #是否为数据节点(仅存储数据),true为是,false为否 discovery.zen.ping.unicast.hosts: ["0.0.0.0:9300", "0.0.0.0:9301"] #设置集群中master节点的初始列表 discovery.zen.minimum_master_nodes: 1#主结点数量的最少值 ,此值的公式为:(master_eligible_nodes / 2) + 1 node.ingest: true bootstrap.memory_lock: false node.max_local_storage_nodes: 2 #单机允许的最大存储结点数 path.data: D:\ElasticSearch\elasticsearch-6.2.1-1\data #配置es的data文件夹路径 path.logs: D:\ElasticSearch\elasticsearch-6.2.1-1\logs #配置es的logs文件夹路径 http.cors.enabled: true #是否开启跨域,true为是,false为否 http.cors.allow-origin: /.*/ #允许所有域名
-
jvm.options
作用:设置最小及最大的JVM堆内存大小
在jvm.options中设置 -Xms和-Xmx:
1) 两个值设置为相等
2) 将 Xmx 设置为不超过物理内存的一半。 -
log4j2.properties
作用:日志文件设置,ES使用log4j,注意日志级别的配置。
es启动
在elasticsearch-6.2.1的bin目录下,双击elasticsearch.bat即可启动。浏览器输入:http://localhost:9200。
head插件安装
-
elasticsearch-head服务
在elasticsearch-head的目录下,用cmd执行npm run start命令即可启动。浏览器输入:http://localhost:9100。注意事项:需要node.js环境
-
chrome-elasticsearch-head谷歌插件
在谷歌浏览器中的“更多工具”→“扩展程序”→“加载已解压的扩展程序”,选择chrome-elasticsearch-head下的0.1.5_0版本注意事项:需要保存好该文件,如果该文件删除了,则该插件也就没有了。
ES快速入门
ES作为一个索引及搜索服务,对外提供丰富的REST接口,快速入门部分的实例使用head插件来测试,目的是对ES
的使用方法及流程有个初步的认识。记住流程:索引库→映射→文档→搜索。
创建索引库
关键字:settings
-
使用Postman进行创建:
put 请求: http://localhost:9200/索引库名称
{ "settings":{ "index":{ "number_of_shards":1, #设置分片的数量 "number_of_replicas":0 #设置副本的数量 } } }
number_of_shards:设置分片的数量
number_of_replicas:设置副本的数量 -
使用head插件进行创建:
创建映射
关键字:mapping
-
使用Postman进行创建:
发送 :post 请求 http://localhost:9200/索引库名称 /类型名称/_mapping
例子:post http://localhost:9200/test/doc/_mapping
表示:在 test索引库下的doc类型下创建映射。doc是类型名,可以自定义。在ES6.0中要弱化类型的概念,
给它起一个没有具体业务意义的名称。{ "properties": { "name": { "type": "text" }, "description": { "type": "text" }, "enabled": { "type": "keyword" } } }
创建文档
发送:put 或 post 请求 http://localhost:9200/索引库名称 /类型名/id值(如果不指定id值ES会自动生成ID)
例子:put 或 post http://localhost:9200/test/doc/1
{
"name": "java开发语言",
"description": "最大支持两颗处理器/最大支持512G内存/1个PCI-E 3.0 x16/最大支持3块3.5热插拔硬盘/2×1G RJ45 端口,1×IPMI管理接口(RJ45)",
"enabled": "1"
}
搜索文档
发送:get http://localhost:9200/索引库名称 /类型名/id值
例子:get http://localhost:9200/test/doc/1
结果说明:
took:本次操作花费的时间,单位为毫秒。
timed_out:请求是否超时
_shards:说明本次操作共搜索了哪些分片
hits:搜索命中的记录
hits.total : 符合条件的文档总数 hits.hits :匹配度较高的前N个文档
hits.max_score:文档匹配得分,这里为最高分
_score:每个文档都有一个匹配度得分,按照降序排列。
_source:显示了文档的原始内容。
IK分词器
-
安装IK分词器
解压,并将解压的文件拷贝到ES安装目录的plugins下的ik目录下(安装包在网盘中) -
两种分词模式
- ik_max_word
会将文本做最细粒度的拆分,比如会将“中华人民共和国人民大会堂”拆分为“中华人民共和国、中华人民、中华、
华人、人民共和国、人民、共和国、大会堂、大会、会堂等词语。一般索引分词用 ik_max_word 分词模式。
- ik_smart
会做最粗粒度的拆分,比如会将“中华人民共和国人民大会堂”拆分为中华人民共和国、人民大会堂。一般搜索分词用 ik_smart分词模式,为了直接查询到用户想要的查询的数据。
-
测试IK分词器
发送:post localhost:9200/_analyzeik_max_word测试:
{ "text":"中华人民共和国人民大会堂", "analyzer":"ik_max_word" }
ik_smart测试:
{ "text":"中华人民共和国人民大会堂", "analyzer":"ik_smart" }
-
自定义词库
如果要让分词器支持一些专有词语,可以自定义词库。
iK分词器自带一个main.dic的文件,此文件为词库文件。
-
在上边的目录中新建一个my.dic文件(注意文件格式为utf-8(不要选择utf-8 BOM))
-
修改IKAnalyzer.cfg.xml的ext_dict
映射
映射维护方法
- 查询所有索引的映射:
GET: http://localhost:9200/_mapping - 创建映射
Post:http://localhost:9200/xc_course/doc/_mapping{ "properties": { "name": { "type": "text" }, "description": { "type": "text" }, "enabled": { "type": "keyword" } } }
- 更新映射
映射创建成功可以添加新字段,已有字段不允许更新。 - 删除映射
通过删除索引来删除映射。
常用映射类型
- 文本类型
-
text:
1) analyzer:索引分词
取值:ik_max_word(推荐)、ik_smart2)search_analyzer:搜索分词
取值:ik_max_word、ik_smart(推荐)3)index:建立索引
取值:true(默认)、false -
keyword:
通常搜索keyword是按照整体搜索,所以创建keyword字段的索引时是不进行分词的,比如:邮政编码、手机号码、身份证等。
- date日期类型
- format:日期格式(支持年月日时分秒、年月日及毫秒三种格式)
取值: “yyyy‐MM‐dd HH:mm:ss||yyyy‐MM‐dd||epoch_millis”注意事项:日期类型不用设置分词器,通常日期类型的字段用于排序。
- 数值类型
es支持的数值类型很多,比如long、integer、short、double等。
Java集成ES搜索
这里不详细讲,在网盘的doc文件夹下有详细的讲解,如上只是对ElasticSearch一个简单的介绍,纯属个人笔记。