Elasticsearch简介

Elasticsearch是什么?

Elaticsearch简称为ES,是一个开源的可扩展的分布式的全文检索引擎,它可以近乎实时的存储、检索数据。本身扩展性很好,可扩展到上百台服务器,处理PB级别的数据。ES使用Java开发并使用Lucene作为其核心来实现索引和搜索的功能,但是它通过简单的RestfulAPI和javaAPI来隐藏Lucene的复杂性,从而让全文搜索变得简单。

起源:Shay Banon。2004年失业,陪老婆去伦敦学习厨师。失业在家帮老婆写一个菜谱搜索引擎。封装了lucene,做出了开源项目compass。找到工作后,做分布式高性能项目,再封装compass,写出了elasticsearch,使得lucene支持分布式。现在是Elasticsearch创始人兼Elastic首席执行官

Elasticsearch的功能

  • 分布式的搜索引擎

分布式:Elasticsearch自动将海量数据分散到多台服务器上去存储和检索

  • 全文检索

提供模糊搜索等自动度很高的查询方式,并进行相关性排名,高亮等功能

  • 数据分析引擎(分组聚合)

电商网站,最近一周笔记本电脑这种商品销量排名top10的商家有哪些?新闻网站,最近1个月访问量排名top3的新闻板块是哪些

  • 对海量数据进行近实时的处理

海量数据的处理:因为是分布式架构,Elasticsearch可以采用大量的服务器去存储和检索数据,自然而然就可以实现海量数据的处理。近实时指的是Elasticsearch可以实现秒级别的数据搜索和分析

Elasticsearch的特点

  1. 安装方便:没有其他依赖,下载后安装非常方便;只用修改几个参数就可以搭建起来一个集群
  2. JSON:输入/输出格式为 JSON,意味着不需要定义 Schema,快捷方便
  3. RESTful:基本所有操作 ( 索引、查询、甚至是配置 ) 都可以通过 HTTP 接口进行
  4. 分布式:节点对外表现对等(每个节点都可以用来做入口)加入节点自动负载均衡
  5. 多租户:可根据不同的用途分索引,可以同时操作多个索引
  6. 支持超大数据:可以扩展到PB级的结构化和非结构化数据海量数据的近实时处理

使用场景

  1. 搜索类场景

如电商网站、招聘网站、新闻资讯类网站、各种app内的搜索。

  1. 日志分析类场景

经典的ELK组合(Elasticsearch/Logstash/Kibana),可以完成日志收集,日志存储,日志分析查询界面基本功能,目前该方案的实现很普及,大部分企业日志分析系统使用了该方案。

  1. 数据预警平台及数据分析场景

例如电商价格预警,在支持的电商平台设置价格预警,当优惠的价格低于某个值时,触发通知消息,通知用户购买。数据分析常见的比如分析电商平台销售量top 10的品牌,分析博客系统、头条网站top10关注度、评论数、访问量的内容等等。

  1. 商业BI(Business Intelligence)系统

比如大型零售超市,需要分析上一季度用户消费金额,年龄段,每天各时间段到店人数分布等信息,输出相应的报表数据,并预测下一季度的热卖商品,根据年龄段定向推荐适宜产品。Elasticsearch执行数据分析和挖掘,Kibana做数据可视化。

常见案例

  • 维基百科、百度百科:有全文检索、高亮、搜索推荐功能
  • stack overflow:有全文检索,可以根据报错关键信息,去搜索解决方法。
  • github:从上千亿行代码中搜索你想要的关键代码和项目。
  • 日志分析系统:各企业内部搭建的ELK平台

Elasticsearch VS Solr

  • Lucene

Lucene是Apache基金会维护的一套完全使用Java编写的信息搜索工具包(Jar包),它包含了索引结构、读写索引工具、相关性工具、排序等功能,因此在使用Lucene时仍需要我们自己进一步开发搜索引擎系统,例如数据获取、解析、分词等方面的东西。

注意:Lucene只是一个框架,我们需要在Java程序中集成它再使用。而且需要很多的学习才能明白它是如何运行的,熟练运用Lucene非常复杂。

  • Solr

Solr是一个有HTTP接口的基于Lucene的查询服务器,是一个搜索引擎系统,封装了很多Lucene细节,Solr可以直接利用HTTP GET/POST请求去查询,维护修改索引

  • Elasticsearch

Elasticsearch也是一个建立在全文搜索引擎 Apache Lucene基础上的搜索引擎。采用的策略是分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。

总结:

  1. Solr和Es都是基于Lucene实现的
  2. Solr利用Zookeeper进行分布式管理,而Es自身带有分布式协调管理功能
  3. Solr比Es实现更全面,功能更多,而Es本身更注重于核心功能,高级功能多由第三方插件提供
  4. Solr在传统的搜索应用中表现比Es好,而Es在实时搜索应用方面比Solr好
  5. Solr查询快,但更新索引时慢,可用于电商等查询多的应用;而Es建立索引快,更实时
  6. 随着数据量的增加,Solr的搜索效率会变得更低,而Es却没有明显变化

安装部署ES

  1. 下载es,并解压

https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-3-0

  1. 编辑vim config/elasticsearch.yml,修改下面的4个地方。network.host对应自己机器的ip
node.name: node-1
network.host: 192.168.211.136
#
# Set a custom port for HTTP:
#
http.port: 9200
cluster.initial_master_nodes: ["node-1"]
  1. ++按需++修改vim config/jvm.options内存设置

可以调整里面的Xms和Xmx

3. 添加es用户(es默认root用户无法启动)

useradd estest

#修改密码
passwd estest
  1. 赋予estest用户一个目录权限
chown -R estest /usr/elasticsearch/
  1. 修改/etc/sysctl.conf
#末尾添加
vm.max_map_count=655360

修改完执行sysctl -p,让其生效

sysctl -p
  1. 修改/etc/security/limits.conf
#末尾添加
*        soft  nofile      65536
*        hard  nofile      65536
*        soft  nproc      4096
*        hard  nproc      4096
  1. 修改/etc/security/limits.d/20-nproc.conf
#末尾添加
* hard nproc 4096

重新登录或重启服务器使配置生效。

  1. 启动es
#切换用户
su estest
#启动
bin/elasticsearch
  1. 测试

http://192.168.56.115:9200/

测试ok,安装成功!!!

安装配置Kibana

什么是Kibana?

Kibana是一个基于Node.js的Elasticsearch索引库数据统计工具,可以利用Elasticsearch的聚合功能,生成各种图表,如柱状图、线状图、饼图等。而且还提供了操作Elasticsearch索引数据的控制台,并且提供了一定的API提示,非常有利于我们学习Elasticsearch的语法。

安装Kibana

  1. 下载Kibana

https://www.elastic.co/cn/downloads/kibana

root账户下操作:

  1. 解压
  2. 改变kibana目录权限、设置访问权限
chown -R estest /usr/local/kibana-7.3.0-linux-x86_64
chmod -R 777 /usr/local/kibana-7.3.0-linux-x86_64
  1. 修改配置文件
server.port: 5601
server.host: "0.0.0.0"
# The URLs of the Elasticsearch instances to use for all your queries.
elasticsearch.hosts: ["http://192.168.211.136:9200"]
  1. 启动
su estest
bin/kibana

访问地址: http://192.168.56.115:5601

后续的操作我们可以使用kibana来访问es:

Es集成IK分词器

KAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始,IKAnalyzer已经推出了3个大版本。最初,它是以开源项目Lucene为应用主体的,结合词典分词和文法分析算法的中文分词组件。新版本的IKAnalyzer3.0则发展为面向Java的公用分词组件,独立于

Lucene项目,同时提供了对Lucene的默认优化实现。

插件安装方式

  1. 在es的bin目录下执行以下命令,es插件管理器会自动帮我们安装,然后等待安装完成。
bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.3.0/elasticsearch-analysis-ik-7.3.0.zip

安装包安装方式

  1. 下载 https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.3.0/elasticsearch-analysis-ik-7.3.0.zip

  2. 在es安装目录下的plugins目录下新建analysis-ik目录

#新建analysis-ik文件夹
mkdir analysis-ik
#切换至 analysis-ik文件夹下
cd analysis-ik
#上传资料中的 elasticsearch-analysis-ik-7.3.0.zip
#解压
unzip elasticsearch-analysis-ik-7.3.3.zip
#解压完成后删除zip
rm -rf elasticsearch-analysis-ik-7.3.0.zip
  1. 重启es

测试分词器

IK分词器有两种分词模式:ik_max_word和ik_smart模式

  • ik_max_word:将文本做最细粒度的拆分
  • ik_smart:将文本做最粗力度的拆分

示例:

POST _analyze
{
"analyzer": "ik_max_word",
"text": "南京市长江大桥"
}

得到结果如下:

{
"tokens" : [
{
"token" : "南京市",
"start_offset" : 0,
"end_offset" : 3,
"type" : "CN_WORD",
"position" : 0
},
{
"token" : "南京",
"start_offset" : 0,
"end_offset" : 2,
"type" : "CN_WORD",
"position" : 1
},
{
"token" : "市长",
"start_offset" : 2,
"end_offset" : 4,
"type" : "CN_WORD",
"position" : 2
},
{
"token" : "长江大桥",
"start_offset" : 3,
"end_offset" : 7,
"type" : "CN_WORD",
"position" : 3
},
{
"token" : "长江",
"start_offset" : 3,
"end_offset" : 5,
"type" : "CN_WORD",
"position" : 4
},
{
"token" : "大桥",
"start_offset" : 5,
"end_offset" : 7,
"type" : "CN_WORD",
"position" : 5
}
]
}

扩展词典

分词结果没有我们想要的时候,可以自己扩展。如:南京市长江大桥,它的语义是南京市市长叫“江大桥”。

  1. 进入到 config/analysis-ik/(插件命令安装方式)或plugins/analysis-ik/config(安装包安装方式) 目录下, 新增自定义词典(文件名随意)
vim my_ext_dict.dic

内容输入:江大桥

2. 将我们的自定义扩展文件配置上

vim 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">my_ext_dict.dic</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords"></entry>
<!--用户可以在这里配置远程扩展字典 -->
<!-- <entry key="remote_ext_dict">words_location</entry> -->
<!--用户可以在这里配置远程扩展停止词字典-->
<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
  1. 配置完后重启es

停用词配置同理。

同义词典使用

同一个东西有不同的词语来表示。我们搜索的时候期望输入"土豆",能搜出"洋芋",输入"西红柿"能搜出"番茄"等等。

Elasticsearch 自带一个名为 synonym 的同义词 filter。为了能让 IK 和 synonym 同时工作,我们需要定义新的analyzer,用IK做tokenizer,synonym做filter。

  1. config/analysis-ik目录下创建synonym.txt文件,输入一些同义词
西红柿,番茄
  1. 创建索引时使用同义词配置
{
"settings":{
"analysis":{
"filter":{
"word_sync":{
"type":"synonym",
"synonyms_path":"analysis-ik/synonym.txt"
}
},
"analyzer":{
"ik_sync_max_word":{
"filter":[
"word_sync"
],
"type":"custom",
"tokenizer":"ik_max_word"
},
"ik_sync_smart":{
"filter":[
"word_sync"
],
"type":"custom",
"tokenizer":"ik_smart"
}
}
}
},
"mappings":{
"properties":{
"字段名":{
"type":"字段类型",
"analyzer":"ik_sync_smart",
"search_analyzer":"ik_sync_smart"
}
}
}
}

以上配置定义了ik_sync_max_word和ik_sync_smart这两个新的analyzer,对应IK的ik_max_word和ik_smart两种分词策略。

  1. 搜索时指定分词器ik_sync_max_word或ik_sync_smart即可拥有同义词功能。

示例如下:

  1. 建索引
PUT /test-synonym
{
"settings":{
"analysis":{
"filter":{
"word_sync":{
"type":"synonym",
"synonyms_path":"analysis-ik/synonym.txt"
}
},
"analyzer":{
"ik_sync_max_word":{
"filter":[
"word_sync"
],
"type":"custom",
"tokenizer":"ik_max_word"
},
"ik_sync_smart":{
"filter":[
"word_sync"
],
"type":"custom",
"tokenizer":"ik_smart"
}
}
}
},
"mappings":{
"properties":{
"name":{
"type":"text",
"analyzer":"ik_sync_smart",
"search_analyzer":"ik_sync_smart"
}
}
}
}
  1. 插入数据
POST /test-synonym/_doc/1
{
"name":"我喜欢吃番茄"
}
  1. 搜索
POST /test-synonym/_search
{
"query":{
"match":{
"name":"西红柿"
}
}
}

Elasticsearch学习系列一(部署和配置IK分词器)的更多相关文章

  1. Solr(四)Solr实现简单的类似百度搜索高亮功能-1.配置Ik分词器

    配置Ik分词器 一 效果图 二 实现此功能需要添加分词器,在这里使用比较主流的IK分词器. 1 没有配置IK分词器,用solr自带的text分词它会把一句话分成单个的字. 2 配置IK分词器,的话它会 ...

  2. Elasticsearch初步使用(安装、Head配置、分词器配置)

    目录 返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html 1.ElasticSearch简单说明 a.ElasticSearch是一个基于Lu ...

  3. 七、Elasticsearch+elasticsearch-head的安装+Kibana环境搭建+ik分词器安装

    一.安装JDK1.8 二.安装ES 三个节点:master.slave01.slave02 1.这里下载的是elasticsearch-6.3.1.rpm版本包 https://www.elastic ...

  4. Solr——配置IK分词器

    首先需要的准备好jdk1.8和tomcat8以及ik分词器(ik分词器是5.x的版本,和solr4.10搭配的版本不一样,虽然是5.x的版本但是也是能使用在solr7.2版本上的) 分享链接https ...

  5. 整合Solr到Tomcat服务器,并配置IK分词

    好久没有接触新东西了,最新开始熟悉solr,实例展示单机环境solr整合. 整合方案一 1.下载Tomcat与solr并解压 Tomcat解压后磁盘路径为D:\program files\Tomcat ...

  6. [Linux]Linux下安装和配置solr/tomcat/IK分词器 详细实例一.

    在这里一下讲解着三个的安装和配置, 是因为solr需要使用tomcat和IK分词器, 这里会通过图文教程的形式来详解它们的安装和使用.注: 本文属于原创文章, 如若转载,请注明出处, 谢谢.关于设置I ...

  7. [Linux]Linux下安装和配置solr/tomcat/IK分词器 详细实例二.

    为了更好的排版, 所以将IK分词器的安装重启了一篇博文,  大家可以接上solr的安装一同查看.[Linux]Linux下安装和配置solr/tomcat/IK分词器 详细实例一: http://ww ...

  8. solr配置同义词,停止词,和扩展词库(IK分词器为例)

    定义 同义词:搜索结果里出现的同义词.如我们输入”还行”,得到的结果包括同义词”还可以”. 停止词:在搜索时不用出现在结果里的词.比如is .a .are .”的”,“得”,“我” 等,这些词会在句子 ...

  9. ElasticSearch5.3安装IK分词器并验证

    ElasticSearch5.3安装IK分词器 之前使用Elasticsearch安装head插件成功了,但是安装IK分词器却失败了.貌似是ElasticSearch5.0以后就不支持直接在elast ...

随机推荐

  1. MySQL---char和varchar的区别

    char和varchar的区别 char表示定长, 即长度固定. varchar表示变长, 即长度可变. 当输入数据的长度小于定义的长度时, char会用空格填充, 而varchar则按照实际长度存储 ...

  2. 7-19(排序) 寻找大富翁 (25 分)(归并排序)(C语言实现)

    7-19(排序) 寻找大富翁 (25 分) 胡润研究院的调查显示,截至2017年底,中国个人资产超过1亿元的高净值人群达15万人.假设给出N个人的个人资产值,请快速找出资产排前M位的大富翁. 输入格式 ...

  3. 【Electron】Electron Icon 图标说明、及常见问题

    [Electron]Electron Icon 图标说明.及常见问题 其实各种打包模块都有相关的文档说明,相关链接如下: electron-builder:https://www.electron.b ...

  4. 【直播回顾】OpenHarmony知识赋能第四期第二课——GPIO驱动开发

    3月17日晚上19点,​知识赋能第四期直播的第二节课<OpenHarmony标准系统HDF框架之GPIO驱动开发>​,在OpenHarmony开发者成长计划社群内成功举办. 本期课程,由​ ...

  5. 支持中文!秒建 wiki 知识库的开源项目,构建私人知识网络

    不知道有没有人和我一样,觉得自建的东西是互联网上的"自留地".私人空间,有一种自己的一亩三分地随心所欲的痛快. 比如自建的博客想写什么随笔就写什么,不用取悦读者可以自娱自乐:再比如 ...

  6. 建设Kubernetes生产环境的16条建议

    点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! Kubernetes是用于构建高度可扩展系统的强大工具. ...

  7. Linux 运维工程师面试问答录(推荐阅读)

    一个执着于技术的公众号 本文整理了一些比较常见的 Linux 相关的面试题目,该问答录主要分为基础知识篇和服务器篇.内容主要涉及 Linux 基本原理.常用命令操作.服务器应用等部分的内容. Linu ...

  8. MySQL8新增降序索引

    MySQL8新增降序索引 桃花坞里桃花庵,桃花庵里桃花仙.桃花仙人种桃树,又摘桃花卖酒钱. 一.MySQL5.7 降序索引 MySQL在语法上很早就已经支持降序索引,但实际上创建的却仍然是升序索引,如 ...

  9. 通过有序线性结构构造AVL树

    通过有序线性结构构造AVL树 本博客旨在结局利用有序数组和有序链表构造平衡二叉树(下文使用AVL树代指)问题. 直接通过旋转来构造AVL树似乎是一个不错的选择,但是稍加分析就会发现,这样平白无故做了许 ...

  10. SecureCRT使用SSH链接出现Password Authentication Failed,Please verify that the username and password are correct的解决办法(亲测有效)