ElasticSearch(简称ES)的由来
基于Lucene(java)开发升级而来。ElasticSearch是基于Lucene做了一些封装和增强,是一个开源的高扩展的分布式全文搜索引擎,它可以近乎实时的存储、检索数据,它是通过简单的RESTful API来隐藏Lucene的复杂性,让全文搜索更加简单。
谁在使用:
维基百科,Stack Overflow,GitHub等等
ELK技术=ES+logStash(采集日志)+Kibana 用于-日志数据分析
ES、Solr、Lucene的关联与区别:
- Solr也是基于Lucene开发而来,
- ES可以使用RestFul,性能方面的提升。
- es开箱即用,solr安装复杂;
- solr利用Zookeeper进行分布式管理,ES用的是自身带有分布式的功能;
- solr支持更多的数据格式:json,xml,csv,es只支持json,但是已经足够我们使用;
<mark style="box-sizing: border-box;">注意:JDK1.8是最低要求!</mark>
正文开始:
7.6.2版本:https://www.elastic.co/downloads/past-releases/elasticsearch-7-6-2
ELK三剑客,都是解压即用.(环境:需要node)
Windows安装:下载安装包后,解压新建目录
目录:
- bin-启动文件
- config-配置文件
- log4j2 日志配置文件
- jvm.options jvm配置
- elasticsearch.yml es的配置文件,默认9200端口
启动:
bin目录直接启动:elasticsearch.bat文件
访问:9200端口:页面显示
{
"name" : "LAPTOP-NML71DV4",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "wXf0oB0CS22VXSy_aDP2cg",
"version" : {
"number" : "7.6.2",
"build_flavor" : "default",
"build_type" : "zip",
"build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
"build_date" : "2020-03-26T06:34:37.794943Z",
"build_snapshot" : false,
"lucene_version" : "8.4.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
安装可视化界面:es head插件(需要node环境)
下载地址:https://github.com/mobz/elasticsearch-head
解压目录:安装D:\Java\elasticsearch\elasticsearch-head-master
进入目录后:cnpm install
运行:npm run start (注意:由于master是9100端口,而es为9200端口,会有跨域问题)
解决跨域:修改elasticsearch.yml,添加如下两行
http.cors.enabled: true
http.cors.allow-origin: "*"
访问:localhost:9100
-索引就是数据库,当成数据库页面来看
(注意:此时cmd可能会锁定,导致手动添加索引卡住,点一下回车键即可)
-就当作数据库navicat来看,关注-概览,索引,数据浏览即可,后面的查询我们用kibana去做
Kibana(需要版本对应es)
Kibana是一个针对es的开源分析及可视化平台,用来搜索,查看交互存储再es索引中的数据,可以通过各种图标进行高级数据分析及展示.
解压后:启动测试:bin-kibana.bat
汉化:打开config/kibana.yml 修改#i18n.locale: "en"为i18n.locale: "zh-CN"
ES核心概念
ES是一个面向文档
MySQL | ES |
---|---|
数据库 | 索引 |
表 | types(将被弃用) |
行 | documents文档 |
字段 | fields |
物理设计:ES默认在后台把每个索引划分成多个片,每分分片可以在集群中的不同服务器间迁移,一个人就是一个集群,默认集群名字是elasticsearch.
文档 --一条条数据
索引 --数据库
score-权重-即命中数
IK分词器
何为分词? 分词就是把一段种文或者别的划分成一个个关键字,我们搜索的时候就会把自己的信息进行分词,会把数据库中或者索引库中的数据进行分词,然后匹配,中文是把每个字堪称一个词.中文建议使用IK分词器.
IK提供了2个分词器:ik_smart 和 ik_max_word,ik_smart为最少切分,ik_max_word为最细粒度划分.
下载IK分词器(注意与es同版本):https://github.com/medcl/elasticsearch-analysis-ik
下载完后解压放入es目录下的plugins目录下
重启es
使用Kibana分词器测试:打开页面->工具页面
分别测试2个分词器
GET _analyze
{
"analyzer":"ik_smart",
"text": "超级喜欢晏子哒哒"
}
GET _analyze
{
"analyzer":"ik_max_word",
"text": "超级喜欢晏子哒哒"
}
比如'超级喜欢晏子哒哒',这时候晏子哒哒会被分成4个词,而不是我想要的,此时需要自己配置词,加入到分词器的字典中!
IK分词器增加自己配置: config->IKAnalyzer.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典 -->
<entry key="ext_dict">test.dic</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords"></entry>
<!--用户可以在这里配置远程扩展字典 -->
<!-- <entry key="remote_ext_dict">words_location</entry> -->
<!--用户可以在这里配置远程扩展停止词字典-->
<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
新建test.dic:
晏子哒哒
保存完重启es测试.
未完待续...