elasticsearch系列一:elasticsearch(ES简介、安装&配置、集成Ikanalyzer)

一、ES简介

1. ES是什么?

Elasticsearch 是一个开源的搜索引擎,建立在全文搜索引擎库 Apache Lucene 基础之上

用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目的是使全文检索变得简单, 通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API

Elasticsearch 不仅仅只是一个全文搜索引擎。 它可以被下面这样准确的形容:

一个分布式的实时文档存储,每个字段可以被索引与搜索——作数据库用

一个分布式实时分析搜索引擎

能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据

2. ES的诞生

原文链接:https://www.elastic.co/guide/cn/elasticsearch/guide/current/intro.html

3. ES的发展历程

Elasticsearch 后来作为一家公司(Elastic公司)进行运作,定位为数据搜索和分析平台。在2014年6月获得7000万美元融资,累积融资过亿美元。

ES现在可以与Java、Ruby、Python、PHP、Perl、.NET等多种客户端集成。也可与Hadoop、Spark等大数据分析平台进行集成,功能十分强大。

基于Elasticsearch衍生出了一系列开源软件,统称为 Elatic Stack

说明:

因为logstash比较耗内存,所以用Beats来替代

为避免版本混乱,从5.0开始,Elastic公司将各组件的版本号统一。使用时,各组件版本号应一致(版本号形式:x.y.z,z可以不同)。

4. ES的特性

官网的介绍: https://www.elastic.co/cn/products/elasticsearch

速度快、易扩展、弹性、灵活、操作简单、多语言客户端、X-Pack、hadoop/spark强强联手、开箱即用。

分布式:横向扩展非常灵活
全文检索:基于lucene的强大的全文检索能力;
近实时搜索和分析:数据进入ES,可达到近实时搜索,还可进行聚合分析
高可用:容错机制,自动发现新的或失败的节点,重组和重新平衡数据
模式自由:ES的动态mapping机制可以自动检测数据的结构和类型,创建索引并使数据可搜索。
RESTful API:JSON + HTTP

5. ES的应用场景

6. ES的架构

说明:

Gateway是ES用来存储索引的文件系统,支持多种类型。
Gateway的上层是一个分布式的lucene框架。
Lucene之上是ES的模块,包括:索引模块、搜索模块、映射解析模块等
ES模块之上是 Discovery、Scripting和第三方插件。Discovery是ES的节点发现模块,不同机器上的ES节点要组成集群需要进行消息通信,集群内部需要选举master节点,这些工作都是由Discovery模块完成。支持多种发现机制,如 Zen 、EC2、gce、Azure。Scripting用来支持在查询语句中插入javascript、python等脚本语言,scripting模块负责解析这些脚本,使用脚本语句性能稍低。ES也支持多种第三方插件。
再上层是ES的传输模块和JMX.传输模块支持多种传输协议,如 Thrift、memecached、http,默认使用http。JMX是java的管理框架,用来管理ES应用。
最上层是ES提供给用户的接口,可以通过RESTful接口和ES集群进行交互。

7. ES的核心概念

Near Realtime(NRT) 近实时。数据提交索引后,立马就可以搜索到。
Cluster 集群,一个集群由一个唯一的名字标识,默认为“elasticsearch”。集群名称非常重要,具有相同集群名的节点才会组成一个集群。集群名称可以在配置文件中指定。
Node 节点:存储集群的数据,参与集群的索引和搜索功能。像集群有名字,节点也有自己的名称,默认在启动时会以一个随机的UUID的前七个字符作为节点的名字,你可以为其指定任意的名字。通过集群名在网络中发现同伴组成集群。一个节点也可是集群。
Index 索引: 一个索引是一个文档的集合(等同于solr中的集合)。每个索引有唯一的名字,通过这个名字来操作它。一个集群中可以有任意多个索引。
Type 类型:指在一个索引中,可以索引不同类型的文档,如用户数据、博客数据。从6.0.0 版本起已废弃,一个索引中只存放一类数据。
Document 文档:被索引的一条数据,索引的基本信息单元,以JSON格式来表示。
Shard 分片:在创建一个索引时可以指定分成多少个分片来存储。每个分片本身也是一个功能完善且独立的“索引”,可以被放置在集群的任意节点上。分片的好处:
允许我们水平切分/扩展容量
可在多个分片上进行分布式的、并行的操作,提高系统的性能和吞吐量。

注意:分片数创建索引时指定,创建后不可改了。备份数可以随时改。
Replication 备份: 一个分片可以有多个备份(副本)。备份的好处:
高可用。一个主分片挂了,副本分片就顶上去
扩展搜索的并发能力、吞吐量。搜索可以在所有的副本上并行运行。-高并发下副本也可搜索

8. 为了方便理解,作一个ES和数据库的对比

9. ES学习资源

官网的文档是最好的学习资源,详细、全面,官网还提供有一些视频:
https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html

官网中还提供一个中文的权威指南,可以学习,(版本稍老了点是基于2.0的):
https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html

二、安装&配置

1. ES安装包

官网下载地址: https://www.elastic.co/downloads/elasticsearch

2. JDK要求

JDK版本: 1.8

3. 在linux上安装示例

注意:ES不能以root用户身份运行 确保运行用户对各使用到的目录的权限

3.1 获取安装包

版本 6.2.4

curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.4.tar.gz

3.2 解压到安装目录

tar -xvf elasticsearch-6.2.4.tar.gz -C /opt

3.3 配置
3.4 启动

cd  /opt/elasticsearch-6.2.4/bin
./elasticsearch

启动时指定参数:

./elasticsearch -Ecluster.name=my_cluster_name -Enode.name=my_node_name

了解启动脚本可用选项:

./elasticsearch -h

4. 在linux 虚拟机上运行可能的失败问题

4.1 内存不够用,默认es配置使用1G堆内存,如果的你学习用的虚拟机没有这么大的内存,请在config/jvm.options中调整

4.2 可能会报如下的错误:

解决方法如下:

问题一:max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
解决:修改切换到root用户修改配置limits.conf 添加下面两行
命令:vi /etc/security/limits.conf
* hard nofile 65536
* soft nofile 65536

问题二:max number of threads [1024] for user [lish] likely too low, increase to at least [2048]
解决:切换到root用户,进入limits.d目录下修改配置文件。
vi /etc/security/limits.d/90-nproc.conf
修改如下内容:
* soft nproc 1024
#修改为
* soft nproc 2048

问题三:max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
解决:切换到root用户修改配置sysctl.conf
vi /etc/sysctl.conf
添加下面配置:
vm.max_map_count=655360

并执行命令:
sysctl -p

切换到es的用户。
然后,重新启动elasticsearch,即可启动成功。

5. ES端口说明

9200 对外服务的http 端口

9300 节点间通信的tcp端口

6. 后台运行ES

使用守护进程运行:./elasticsearch -d

7. 关闭ES

非后台运行的:ctrl + c
后台运行的(守护进程运行):kill es进程

8. 在windows中启动

elasticsearch .bat

启动以后访问地址:http://localhost:9200/

9. ES软件目录说明

10. ES 配置说明

10.1 配置文件分离

配置文件目录默认为:$ES_HOME/config,如果需要配置文件与软件分离(方便升级),可以通过 ES_PATH_CONF 环境变量来指定。如你可以在命令行指定声明:

10.2 yml 格式说明

10.3 Jvm参数格式说明

11. ES 重要的配置参数

11.1 数据目录和日志目录,生成环境下应与软件分离

11.2 所属的集群名,默认为 elasticsearch ,可自定义

11.3 节点名,默认为 UUID前7个字符,可自定义

以主机名作节点名:

11.4 network.host  IP绑定

默认绑定的是["127.0.0.1", "[::1]"]回环地址,集群下要服务间通信,需绑定一个ipv4或ipv6地址

11.5 http.port: 9200-9300

对外服务的http 端口, 默认 9200-9300 。可以为它指定一个值或一个区间,当为区间时会取用区间第一个可用的端口。

11.6  transport.tcp.port: 9300-9400

节点间交互的端口, 默认 9300-9400 。可以为它指定一个值或一个区间,当为区间时会取用区间第一个可用的端口。

11.7 Discovery Config  节点发现配置

ES中默认采用的节点发现方式是  zen(基于组播(多播)、单播)。在应用于生产前有两个重要参数需配置:

discovery.zen.ping.unicast.hosts: ["host1","host2:port","host3[portX-portY]"] 单播模式下,设置具有master资格的节点列表,新加入的节点向这个列表中的节点发送请求来加入集群

discovery.zen.minimum_master_nodes: 1 这个参数控制的是,一个节点需要看到具有master资格的节点的最小数量,然后才能在集群中做操作。官方的推荐值是(N/2)+1,其中N是具有master资格的节点的数量。

11.8 Jvm heap 大小设置

生产环境中一定要在jvm.options中调大它的jvm内存。

11.9 JVM heap dump path 设置

生产环境中指定当发生OOM异常时,heap的dump path,好分析问题。在jvm.options中配置:

-XX:HeapDumpPath=/var/lib/elasticsearch

11.10 其他配置

transport.tcp.compress: false
    是否压缩tcp传输的数据,默认false
http.cors.enabled: true
    是否使用http协议对外提供服务,默认true
http.max_content_length: 100mb
    http传输内容的最大容量,默认100mb
node.master: true
    指定该节点是否可以作为master节点,默认是true。ES集群默认是以第一个节点为master,如果该节点出故障就会重新选举master。
node.data: true
    该节点是否存索引数据,默认true。
discover.zen.ping.timeout: 3s
    设置集群中自动发现其他节点时ping连接超时时长,默认为3秒。在网络环境较差的情况下,增加这个值,会增加节点等待响应的时间,从一定程度上会减少误判。
discovery.zen.ping.multicast.enabled: false
    是否启用多播来发现节点。

12. 安装Kibana

Kibana是ES的可视化管理工具

12.1 下载安装包

一定和ES的版本一致( 6.2.4)

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

12.2 安装

解压到安装目录即可

12.3 配置

在config/kibana.yml中配置 elasticsearch.url的值为 ES的访问地址

12.4 启动

./bin/kibana

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

三、集成Ikanalyzer

1. 获取 ES-IKAnalyzer插件

一定和ES的版本一致( 6.2.4)

地址: https://github.com/medcl/elasticsearch-analysis-ik/releases

2. 安装插件

将 ik 的压缩包解压到 ES安装目录的plugins/目录下(最好把解出的目录名改一下,防止安装别的插件时同名冲突),然后重启ES。

3. 扩展词库

配置文件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">custom/mydict.dic;custom/single_word_low_freq.dic</entry>
     <!--用户可以在这里配置自己的扩展停止词字典-->
    <entry key="ext_stopwords">custom/ext_stopword.dic</entry>
    <!--用户可以在这里配置远程扩展字典 远程词库,可热更新,在一处地方维护-->
    <!-- <entry key="remote_ext_dict">words_location</entry> -->
    <!--用户可以在这里配置远程扩展停止词字典-->
    <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

4. 测试 IK

1、创建一个索引

curl -XPUT http://localhost:9200/index

2、创建一个映射mapping

curl -XPOST http://localhost:9200/index/fulltext/_mapping -H ‘Content-Type:application/json‘ -d‘
{
        "properties": {
            "content": {
                "type": "text",
                "analyzer": "ik_max_word",
                "search_analyzer": "ik_max_word"
            }
        }
}‘

3、索引一些文档

curl -XPOST http://localhost:9200/index/fulltext/1 -H ‘Content-Type:application/json‘ -d‘ {"content":"美国留给伊拉克的是个烂摊子吗"}‘

curl -XPOST http://localhost:9200/index/fulltext/2 -H ‘Content-Type:application/json‘ -d‘ {"content":"公安部:各地校车将享最高路权"}‘

curl -XPOST http://localhost:9200/index/fulltext/3 -H ‘Content-Type:application/json‘ -d‘ {"content":"中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"}‘

四、总结

 安装的ES、Kibana和中文分词器的版本一定要一致,否则会不能使用

原文地址:https://www.cnblogs.com/leeSmall/p/9189078.html

时间: 2024-08-14 02:28:49

elasticsearch系列一:elasticsearch(ES简介、安装&配置、集成Ikanalyzer)的相关文章

Hadoop系列之hdfs(分布式文件系统)安装配置

Hadoop系列之hdfs(分布式文件系统)安装配置环境介绍:     ip                        节点192.168.3.10      hdfs-master192.168.3.11      hdfs-slave1192.168.3.12      hdfs-slave21.在所有机器添加hosts192.168.3.10      hdfs-master192.168.3.11      hdfs-slave1192.168.3.12      hdfs-slav

elasticsearch系列一elasticsearch(ES简介、安装&amp;配置、集成Ikanalyzer)

一.ES简介 1. ES是什么? Elasticsearch 是一个开源的搜索引擎,建立在全文搜索引擎库 Apache Lucene 基础之上 用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目的是使全文检索变得简单, 通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API. Elasticsearch 不仅仅只是一个全文搜索引擎. 它可以被下面这样准确的形容: 一个分布式的实时文档存储,每个字段可以被索引与搜索--作数据库用 一个分布式实

elasticsearch(0.90.10)安装配置

一)安装elasticsearch 1)下载elasticsearch-0.90.10,解压,运行\bin\elasticsearch.bat (windwos) 2)进入http://localhost:9200/ 如下图 安装成功! 二)插件——head elasticsearch-head是一个elasticsearch的集群管理工具,它是完全由html5编写的独立网页程序,你可以通过插件把它集成到es. 安装命令:\bin>plugin -install mobz/elasticsear

01 Node.js简介, 安装&amp;配置

Node.js 简介 Node.js 是什么 Node.js 有着强大而灵活的包管理器(node package manager,npm) 目前, 已经有强大第三方工具模块, 例如数据库连接, 网站开发框架, CSS生成器, 操作系统API, 网络通信 等. Node.js 是什么 ? 是一个让 javascript 运行在服务器端的平台, 以前javascript只能运行在浏览器中,  node.js 可以解析 javascript. CommonJS 试图设计一套Javascript的规范.

Vsftpd 简介 安装 配置 验证

一 Vsftpd 简介 一款完全面免费,开放源代码的ftp服务器软件,小巧易用,支持虚拟用户,支持带宽限制,安全性高 二 Vsftpd 安装 配置 1.yum install vsftpd 2.创建虚拟用户目录 mkdir /home/ftpfile 3.添加匿名用户 adduser ftpuser -d /home/ftpfile 4.设置selinux vi /etc/selinux  SELINUX=disable 5.配置vsftpd 参照了链接, 下面是我自己的 1 write_ena

安装Hadoop系列 — eclipse plugin插件编译安装配置

[一].环境参数 eclipse-java-kepler-SR2-linux-gtk-x86_64.tar.gz //现在改为eclipse-jee-kepler-SR2-linux-gtk-x86_64.tar.gz Hadoop1.0.3 Java 1.8.0 Ubuntu 12.04  64bit [二].安装配置 1.复制生成的 hadoop-eclipse-plugin-1.0.3.jar 到 eclipse/plugins 路径下,重启eclipse即可. 2.在eclipse菜单依

elasticsearch系列七:ES Java客户端-Elasticsearch Java client(ES Client 简介、Java REST Client、Java Client、Spring Data Elasticsearch)

一.ES Client 简介 1. ES是一个服务,采用C/S结构 2. 回顾 ES的架构 3. ES支持的客户端连接方式 3.1 REST API ,端口 9200 这种连接方式对应于架构图中的RESTful style API这一层,这种客户端的连接方式是RESTful风格的,使用http的方式进行连接 3.2 Transport 连接 端口 9300 这种连接方式对应于架构图中的Transport这一层,这种客户端连接方式是直接连接ES的节点,使用TCP的方式进行连接 4. ES提供了多种

Elasticsearch系列---初识Elasticsearch

Elasticsearch是什么? Elasticsearch简称ES,是一个基于Lucene构建的开源.分布式.Restful接口的全文搜索引擎,还是一个分布式文档数据库.天生就是分布式.高可用.可扩展的,可以在很短的时间内存储.搜索和分析大量的数据. 什么是全文搜索? 全文搜索也叫全文检索,是指扫描文章中的每一个词,对每一个词进建立一个索引,指明该词在文章中出现的次数和位置,当前端用户输入的关键词发起查询请求后,搜索引擎就会根据事先建立的索引进行查找,并将查询的结果响应给用户. 这里有两个关

SVN入门:流程简介 安装配置 项目库配置 客户端 上线方案

查看警告:show warnings:  备份库结构:mysqldump 库 -add-drop-table  >  路径 添加用户:grant select,insert on 库名 to '用户名'@'172.8.8.8' identified by '密码':flush privileges 所有权限:grant all privileges on *.* to 'name'@'%' identified by 'mima':      ---- 小 Q -----------------

在Debian系列Linux系统Ubuntu上安装配置yum的试验

用习惯了Red Hat系统的都知道我们习惯于三种安装方式:一种是rpm包的方式安装,一种就是tar包的方式来安装,还有一种方式就是yum源的安装. 首先rpm包的用法,我们一般是在Red Hat光驱里安装rpm包,我们发现rpm包都是在光驱的Packages里,那么我们先把光驱挂在到一个目录底下,我们可以对光盘里的文件和文件夹直接进行访问,那么挂载之前我们先在/mnt/目录下创建一个新的文件夹cdrom,我们依次执行命令: mkdir /mnt/cdrom #创建一个文件夹 mount /dev