Elasticsearch说明-安装-配置及使用

1.1 ES定义

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

1.2 Lucene与ES关系?

1)Lucene只是一个库。想要使用它,你必须使用Java来作为开发语言并将其直接集成到你的应用中,更糟糕的是,Lucene非常复杂,你需要深入了解检索的相关知识来理解它是如何工作的。

2)Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。

1.3 ES主要解决问题:

1)检索相关数据;
2)返回统计结果;
3)速度要快。

1.4 ES工作原理

当ElasticSearch的节点启动后,它会利用多播(multicast)(或者单播,如果用户更改了配置)寻找集群中的其它节点,并与之建立连接

1.5 ES核心概念

1. 索引 Index
ES中的索引类似关系型数据库中的数据库,里面存放用户文档数据。因为ES是封装的Lucene,所以底层还是有Lucene的一个或者多个索引组成,数据的增删改查也是有底层的Lucene完成,ES中的分片或副本实际上就是一个Lucene索引。

2. 文档 Document
文档是ES中存储数据的主体,ES中所有的操作都是建立在文档的基础上的,每个文档都是由各种Field组成,每个Field有一个名称和一个或多个值构成。文档展示给用户就是一个JSON对象。

{
    "uname":"zsf",
    "sex":"female"
}

3. 类型 Type
ES中Type是一种逻辑上的概念,类似关系型数据库中的表,每个文档都属于某一种类型,如果没有定义,会有默认值,这里的类型相当于数据库当中的表,ES的每个索引可以包含多种类型。

现在ES5.0之后,就不推荐使用Type了。全部交_doc。也可以任务就是mysql的表名 

4. 映射 Mapping
映射类似关系型数据库中的schema,用于定义field的属性,如字段类型,是否分词等。这里有一点和关系型数据库不同的是ES会在用户没有定义字段属性的情况下,自动嗅探该字段的类型进行自动识别。

就是mysql的字段的数据类型

5. 集群 Cluster
多个ES节点工作在一起组成一个集群。ES对于集群的支持几乎是无缝的,这也是ES重要的竞争优点之一。

6. 节点 Node
一个ES实例就是一个节点,说的再简单点,一台部署了ES服务的机器就是一个节点,同时,一台机器如果硬件资源允许也可以同时启动多个ES实例。ES中每个节点都和集群(如果是多个节点的集群)中的其他节点相互通信,了解所有文档的存储位置并能转发用户的请求到对应的数据节点上。

7. 分片 Shard
因为ES是分布式架构,类似于HDFS的存储方式,所以数据被打散存储在集群的多个节点上,一个分片实际上就是底层Lucene的一个索引,这里说的分片指的是ES中的主分片(因为还有副本分片一说),分片的方式是ES自动完成,用户可以指定分片的数量,主分片一旦指定就不能修改,因为ES打散数据的方式是和索引创建时指定的主分片数量有关(具体参考公式:shard = hash(routting) % number_of_primary_shards进行文档分配),后期改变会导致分片中的数据不可搜索。

8. 副本 Replia
副本就是分片的一个拷贝,不仅能提高自身容灾,另外,请求量很大的情况下,副本可以分担主Shard压力,承担查询功能。副本个数还以在创建完索引后灵活调整。

今天我们介绍了EST基础概念和核心概念,我们下一节将基于实践经验进行Elasticsearch集群管理与监控的介绍!

1.6 ES数据架构的主要概念(与关系数据库Mysql对比)

image.png

(1)关系型数据库中的数据库(DataBase),等价于ES中的索引(Index)
(2)一个数据库下面有N张表(Table),等价于1个索引Index下面有N多类型(Type),
(3)一个数据库表(Table)下的数据由多行(ROW)多列(column,属性)组成,等价于1个Type由多个文档(Document)和多Field组成。
(4)在一个关系型数据库里面,schema定义了表、每个表的字段,还有表和字段之间的关系。 与之对应的,在ES中:Mapping定义索引下的Type的字段处理规则,即索引如何建立、索引类型、是否保存原始索引JSON文档、是否压缩原始JSON文档、是否需要分词处理、如何进行分词处理等。
(5)在数据库中的增insert、删delete、改update、查search操作等价于ES中的增PUT/POST、删Delete、改_update、查GET.

Mysql的主要用途:

存储数据,用来完成强一致性,保证ACID的数据。逻辑性事务性的操作。

Redis的用途:

存储数据,做缓存。

ES的用途:

存储数据,全文检索。

什么项目能用上ES:

商城,社交评论等,

1.7 ELK是什么?

ELK=elasticsearch+Logstash+kibana
elasticsearch:后台分布式存储以及全文检索
logstash: 日志加工、“搬运工”
kibana:数据可视化展示。
ELK架构为数据分布式存储、可视化查询和日志解析创建了一个功能强大的管理链。 三者相互配合,取长补短,共同完成分布式大数据处理工作。

2. ES特点和优势

1)分布式实时文件存储,可将每一个字段存入索引,使其可以被检索到。
2)实时分析的分布式搜索引擎。
分布式:索引分拆成多个分片,每个分片可有零个或多个副本。集群中的每个数据节点都可承载一个或多个分片,并且协调和处理各种操作;
负载再平衡和路由在大多数情况下自动完成。
3)可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。也可以运行在单台PC上(已测试)
4)支持插件机制,分词插件、同步插件、Hadoop插件、可视化插件等。

3、为什么要用ES?

实际项目开发实战中,几乎每个系统都会有一个搜索的功能,当搜索做到一定程度时,维护和扩展起来难度就会慢慢变大,所以很多公司都会把搜索单独独立出一个模块,用ElasticSearch等来实现。

近年ElasticSearch发展迅猛,已经超越了其最初的纯搜索引擎的角色,现在已经增加了数据聚合分析(aggregation)和可视化的特性,如果你有数百万的文档需要通过关键词进行定位时,ElasticSearch肯定是最佳选择。当然,如果你的文档是JSON的,你也可以把ElasticSearch当作一种“NoSQL数据库”, 应用ElasticSearch数据聚合分析(aggregation)的特性,针对数据进行多维度的分析。

4 安装

生产环境的要求

https://www.elastic.co/guide/en/elasticsearch/guide/master/hardware.html#_cpus

首先最重要的资源是内存,排序和聚合都可能导致内存匮乏,因此足够的堆空间来容纳这些是重要的。

64GB RAM的机器是最理想的,但32GB和16GB机器也很常见。少于8GB往往适得其反。

大多数Elasticsearch部署往往对CPU要求很不大,通用集群使用2到8核机器。

1安装jdk8

1.下载jdk8

2.将下载好的安装包放在自己机器上面的对应文件夹中

3.解压jdk安装包

cd /usr/java/
tar -zxvf jdk-8u251-linux-x64.tar

4.配置java环境变量

vi /etc/profile

在文件中末尾添加如下配置

JAVA_HOME=/usr/java/jdk1.8.0_251
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH

5.使配置立即生效

source /etc/profile

6.查看jdk安装情况(如果安装成功会出现对应java版本信息)

java -version

2:安装Elastic

Elastic 需要 Java 8 环境。

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

wget命令:提示command not found
 
1、rpm 安装

下载wget的RPM包:

http://mirrors.163.com/centos/6.8/os/x86_64/Packages/wget-1.12-8.el6.x86_64.rpm

执行 rpm -ivh wget-1.12-8.el6.x86_64.rpm

2、yum安装

yum -y install wget

镜像下载地址

https://thans.cn/mirror/elasticsearch.html

解压

下载成功后,解压到指定目录:

 tar -zxvf elasticsearch-7.0.0-no-jdk-linux-x86_64.tar.gz 

Elasticsearch 目录、配置文件说明、注意点

这里大概解答下各个目录、配置文件的作用:

目录 配置文件 描述
bin 放置脚本文件,如启动脚本 elasticsearch, 插件安装脚本等。
config elasticserch.yml elasticsearch 配置文件,如集群配置、jvm 配置等。
jdk java 运行环境
data path.data 数据持久化文件
lib 依赖的相关类库
logs path.log 日志文件
modules 包含的所有 ES 模块
plugins 包含的所有已安装的插件

注意点:

  • 有些机器内存可能不够,就需要修改 JVM 参数,配置文件路径为 config/jvm.options,ES V7.1 版本默认为 1g, 老版本为2g, 你可以自行修改。
  • XmxXms 数值请设置相同;
  • Xmx 不要超过机器内存的 50%
  • 内存总量不要超过 30GB, 参见官方文档 https://www.elastic.co/cn/blog/a-heap-of-trouble

运行 Elasticsearch

执行启动命令:

bin/elasticsearch
为了安全不允许使用root用户启动
  
root@localhost elasticsearch-7.0.0]# bin/elasticsearch
[2020-06-11T05:02:08,260][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [localhost.localdomain] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root

1、创建用户:elasticsearch

[root@localhost]# adduser elasticsearch

2、创建用户密码,需要输入两次

[root@localhost]# passwd elasticsearch

3、将对应的文件夹权限赋给该用户

[root@localhost]# chown -R elasticsearch:elasticsearch elasticsearch-7.0.0

4、切换至elasticsearch用户

[root@localhost]# su elasticsearch

5、进入启动目录启动 /usr/local/elasticsearch-7.0.0/bin 使用后台启动方式:./elasticsearch -d

[elasticsearch@localhost]$ ./elasticsearch -d

6、启动后测试

输入curl ip:9200,如果返回一个json数据说明启动成功。

当然,还有一种可能性:

[elasticsearch@localhost bin]$ ./elasticsearch -d
[elasticsearch@localhost bin]$ curl 127.0.0.1:9200
curl: (7) Failed connect to 127.0.0.1:9200; Connection refused

修改config/elasticsearch.yml

#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
#network.host: 192.168.0.1
network.host: 0.0.0.0
#
# Set a custom port for HTTP:

再次启动

./elasticsearch -d

然后,curl ip:9200

[elasticsearch@localhost bin]$ curl 127.0.0.1:9200
{
  "name" : "localhost.localdomain",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "n491CMMhRJqkp_CJc9qoYQ",
  "version" : {
    "number" : "7.0.0",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "b7e28a7",
    "build_date" : "2019-04-05T22:55:32.697037Z",
    "build_snapshot" : false,
    "lucene_version" : "8.0.0",
    "minimum_wire_compatibility_version" : "6.7.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

3:启动的问题

ERROR: [3] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
[3]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured

[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
切换到root用户,编辑limits.conf添加如下内容
vi /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536

ulimit -Hn
ulimit -Sn

修改/etc/security/limits.conf文件,增加配置,用户退出后重新登录生效

[2]: max number of threads [3818] for user [es] is too low, increase to at least [4096]
最大线程个数太低。修改配置文件etc/security/limits.conf,增加配置
* soft nproc 4096
* hard nproc 4096

[3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
修改/etc/sysctl.conf文件,增加配置vm.max_map_count=262144
vi /etc/sysctl.conf
sysctl -p
执行命令sysctl -p生效

[4]: system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk
问题原因:因为Centos6不支持SecComp,而ES5.2.1默认bootstrap.system_call_filter为true进行检测,所以导致检测失败,失败后直接导致ES不能启动
解决方法:在elasticsearch.yml中配置bootstrap.system_call_filter为false,注意要在Memory下面:
bootstrap.memory_lock: false
bootstrap.system_call_filter: false

[5]:ERROR: [1] bootstrap checks failed
[1]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
修改
elasticsearch.yml
取消注释保留一个节点
cluster.initial_master_nodes: ["node-1"]
#修改config/elasticsearch.yml下约第23行,放开node.name注释,可更改名称 node.name: node-1

# ------------------------------------ Node ------------------------------------
#
# Use a descriptive name for the node:
#
node.name: node-1

# --------------------------------- Discovery ----------------------------------
#
# Pass an initial list of hosts to perform discovery when this node is started:
# The default list of hosts is ["127.0.0.1", "[::1]"]
#
#discovery.seed_hosts: ["host1", "host2"]
#
# Bootstrap the cluster using an initial set of master-eligible nodes:
#
cluster.initial_master_nodes: ["node-1"]

开启防火墙

firewall-cmd --zone=public --add-port=9200/tcp --permanent
重新启动防火墙
firewall-cmd --reload
版本升级到2.2后,必须建一个单独的账号用于启动elasticsearch,不可以使用root账号进行启动,否则会报以下错误

Exception in thread "main" java.lang.RuntimeException: don't run elasticsearch as root.

也可以这样解决:
在bin目录修改elasticsearch.in.sh文件,填加如下配置项:

JAVA_OPTS="$JAVA_OPTS -Des.insecure.allow.root=true"
这样就可以用root用户启动elasticsearch了,当然还是建议大家创建其他用户使用。

4. 查看集群的健康状况

http://192.168.2.100:9200/_cat

http://192.168.2.100:9200/_cat/health?v

说明:v是用来要求在结果中返回表头

状态值说明

Green - everything is good (cluster is fully functional),即最佳状态

Yellow - all data is available but some replicas are not yet allocated (cluster is fully functional),即数据和集群可用,但是集群的备份有的是坏的
Red - some data is not available for whatever reason (cluster is partially functional),即数据和集群都不可用

查看集群的节点

http://192.168.2.100:9200/_cat/?v

查看所有索引

http://192.168.2.100:9200/_cat/indices?v

5:可视化

KIBans Head Kibana

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

7.0.0下载地址

https://artifacts.elastic.co/downloads/kibana/kibana-7.0.0-linux-x86_64.tar.gz

Kibana 是为 Elasticsearch设计的开源分析和可视化平台。你可以使用 Kibana 来搜索,查看存储在 Elasticsearch 索引中的数据并与之交互。你可以很容易实现高级的数据分析和可视化,以图表的形式展现出来。

上传文件到/usr/java/目录下
$ tar -zxvf kibana-7.0.0-linux-x86_64.tar.gz
vi config/kibana.yml 
解开  elasticsearch.hosts: ["http://localhost:9200"]
解开  kibana.index: ".kibana"
添加  server.host: "192.168.2.100"
$ bin/kibana
kibana必须是在root下运行,否则会报错,启动失败
错误信息
To prevent pending reports from failing on restart, please  set xpack.reporting.encryptionKey in kibana.yml

根据提示,在配置文件kibana.yml中添加【xpack.reporting.encryptionKey】属性:

xpack.reporting.encryptionKey: "a_random_string"
错误信息
please set xpack.security.encryptionKey in kibana.yml

根据提示,在配置文件kibana.yml中添加【xpack.security.encryptionKey】属性:

xpack.security.encryptionKey: "something_at_least_32_characters"

开放端口

firewall-cmd --zone=public --add-port=5601/tcp --permanent
重新启动防火墙
firewall-cmd --reload

6: curl使用

基于HTTP协议,以JSON为数据交互格式的RESTful API

其他所有程序语言都可以使用RESTful API,通过9200端口的与Elasticsearch进行通信,你可以使用你喜欢的WEB客户端,

事实上,如你所见,你甚至可以通过 curl 命令与Elasticsearch通信。

向Elasticsearch发出的请求的组成部分与其它普通的HTTP请求是一样的:

curl -X<VERB> '<PROTOCOL>://<HOST>/<PATH>?<QUERY_STRING>' -d '<BODY>' 
命令格式:

**–curl -X指定http请求的方法(如HEAD GET POST PUT DELETE)httpUrl -d '指定要传输的数据'**

VERB HTTP方法: GET , POST , PUT , HEAD , DELETE

PROTOCOL http或者https协议(只有在Elasticsearch前面有https代理的时候可用)

HOST Elasticsearch集群中的任何一个节点的主机名,如果是在本地的节点,那么就叫localhost

PORT Elasticsearch HTTP服务所在的端口,默认为9200

QUERY_STRING 一些可选的查询请求参数,例如 ?pretty 参数将使请求返回更加美观易读的JSON数据

BODY 一个JSON格式的请求主体(如果请求需要的话)

创建索引库

例子:
建立索引库company,PUT和POST都可以:

索引库名称必须要全部小写,不能以下划线开头,也不能包含逗号

curl -XPUT 'http://localhost:9200/cls38'
[root@localhost ~]# curl -XPUT 'http://localhost:9200/company' 
{"acknowledged":true,"shards_acknowledged":true,"index":"company

运行
1:curl 192.168.2.101:9200/company

2:直接浏览器 打开 http://192.168.2.101:9200/company

创建索引

其中employee是type,1是document,-d是指定要传输的数据(遵循JSON格式):

curl -XPUT http://localhost:9200/company/employee/1  -d '{"name":“zs","age":25}'

curl -H 'Content-Type:application/json' -XPUT http://localhost:9200/company/employee/2 -d '{"name":"铝布","age":25}'

curl -H 'Content-Type:application/json;charset:UTF-8' -XPUT http://localhost:9200/company/employee/3 -d '{"name":"你好","age":25}'

查询索引

根据员工id查询(在任意的查询字符串中添加pretty参数,es可以得到易于识别的json结果)

curl -XGET http://localhost:9200/company/employee/1?pretty

curl后添加-i参数,就能得到反馈头文件
curl -i 'http://localhost:9200/company/employee/1?pretty'
[root@localhost ~]# curl -XGET http://localhost:9200/company/employee/3?pretty
{
  "_index" : "company",
  "_type" : "employee",
  "_id" : "3",
  "_version" : 5,
  "_seq_no" : 13,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "你好",
    "age" : 25
  }
}

也可以直接网页中书写:

http://192.168.2.100:9200/company/employee/1?pretty
如果只需要name
curl -XGET http://localhost:9200/company/employee/1?_source=name

如果只需要source的数据
curl -XGET http://localhost:9200/company/employee/1/_source
curl -XGET http://localhost:9200/company/employee/1/_source?pretty

查询全部(默认返回前面的10个)
curl -XGET http://localhost:9200/company/employee/_search?pretty
根据条件进行查询
curl -XGET http://localhost:9200/company/employee/_search?q=name:zs

删除索引

curl -XDELETE http://localhost:9200/company
http://192.168.2.100:9200/company/employee/_search?pretty

7:head

一、下载 elasticsearch-head-master.zip

下载地址 (https://github.com/mobz/elasticsearch-head)

安装NodeJs

淘宝镜像
npm install -g cnpm --registry=https://registry.npm.taobao.org

  1. elasticsearch-head-master]# node -v
  2. v10.16.0
  3. elasticsearch-head-master]# npm -v
  4. 6.9.0

二、安装grunt

elasticsearch-head-master]# npm install -g grunt-cli

elasticsearch-head-master]# npm install

三、修改

elasticsearch-head-master]# vim Gruntfile.js,添加hostname: '0.0.0.0'


server: {
        options: {
                hostname: '0.0.0.0',
                port: 9100,
                base: '.',
                keepalive: true
        }
}

elasticsearch-head-master]# vim _site/app.js,将this.prefs.get("app-base_uri") || "localhost:9200",修改如下

this._super();
this.prefs = services.Preferences.instance();
this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://192.168.1.100:9200";

四 跨域

打开路径 "..\elasticsearch\config\ " 下的 elasticsearch.yml 文件,在文件末尾添加如下代码:

http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-methods: OPTIONS, HEAD, GET, POST, PUT, DELETE
http.cors.allow-headers: "X-Requested-With, Content-Type, Content-Length, X-User"

五启动


elasticsearch-head-master]# npm run start           nohup npm run start(后台启动)

六开启防火墙

firewall-cmd --zone=public --add-port=9100/tcp --permanent
重新启动防火墙
firewall-cmd --reload

8: Kibana的使用

运行
PUT /company/employee/1
{
  "uname":"路的话",
  "sex":"female",
  "age":12
}
结果
{
  "_index" : "company",
  "_type" : "employee",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}

9:IK分词器安装

默认的分词器

7一下版本的分词

http://192.168.2.100:9200/_analyze?analyzer=standard&pretty=true&text=sojson在线工具

es中对于字符串的默认内置分词是standard类型的,但是这对于中文来说就无能为力了

7版本分词,使用postman。

请求地址: http://192.168.2.100:9200/_analyze

请求类型: POST

BODY===>RAW===>JSON(AppliactionJSON)

参数:

{
"analyzer":"standard",
"text":"hello love you"
}

得到结果

{
    "tokens": [
        {
            "token": "hello",
            "start_offset": 0,
            "end_offset": 5,
            "type": "<ALPHANUM>",
            "position": 0
        },
        {
            "token": "吃",
            "start_offset": 6,
            "end_offset": 7,
            "type": "<IDEOGRAPHIC>",
            "position": 1
        },
        {
            "token": "了",
            "start_offset": 7,
            "end_offset": 8,
            "type": "<IDEOGRAPHIC>",
            "position": 2
        },
        {
            "token": "吗",
            "start_offset": 8,
            "end_offset": 9,
            "type": "<IDEOGRAPHIC>",
            "position": 3
        },
        {
            "token": "you",
            "start_offset": 10,
            "end_offset": 13,
            "type": "<ALPHANUM>",
            "position": 4
        }
    ]
}

在Kibana中使用默认分词器:

http://192.168.2.100:5601/app/kibana#/dev_tools/console?_g=()

GET _analyze
{
  "analyzer": "standard",
  "text":"沉醉于夏季"
}

Result

Elasticsearch-analysis-ik是一款中文的分词插件,支持自定义词库,也有默认的词库。

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

进入解压后的包中看一下,主目录下包含一些插件依赖的外部jar包和一个config文件,

config文件里面的内容是分词器分词时读取文件的主要目录,我们大概说说里面的各文件内容,

IKAnalyzer.cfg.xml:用来配置自定义词库
main.dic:ik原生内置的中文词库,总共有27万多条,只要是这些单词,都会被分在一起
quantifier.dic:放了一些单位相关的词
suffix.dic:放了一些后缀
surname.dic:中国的姓氏
stopword.dic:英文停用词

ik原生最重要的两个配置文件
main.dic:包含了原生的中文词语,会按照这个里面的词语去分词
stopword.dic:包含了英文的停用词

上传打完包的zip文件到linux对应的es的plugins目录下

解压,unzip elasticsearch-analysis-ik-7.0.0.zip
注意,在解压完成后必须删除下载后的压缩包,否则重启es服务时会报错,无法正常加载

yum install -y unzip zip
然后再plusins目录下建立ik目录。
将所有文件拷贝如ik目录下。

启动后报错

main ERROR RollingFileManager (/usr/java/elasticsearch-7.0.0/logs/elasticsearch.log) java.io.FileNotFoundExce.0/logs/elasticsearch.log (Permission denied) 

[root@localhost ~]# adduser han
[root@localhost~]# passwd han
Changing password for user han.
New password:             # 输入密码
Retype new password:      # 再次输入密码
passwd: all authentication tokens updated successfully.
sudo chown -R han Elasticsearch安装目录
sudo chgrp -R han Elasticsearch安装目录

验证结果:

GET _analyze
{
  "analyzer": "ik_smart",
  "text":"沉醉于夏季"
}

{
  "tokens" : [
    {
      "token" : "沉醉于",
      "start_offset" : 0,
      "end_offset" : 3,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
      "token" : "夏季",
      "start_offset" : 3,
      "end_offset" : 5,
      "type" : "CN_WORD",
      "position" : 1
    }
  ]
}
GET _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" : 3,
      "type" : "CN_CHAR",
      "position" : 2
    },
    {
      "token" : "夏季",
      "start_offset" : 3,
      "end_offset" : 5,
      "type" : "CN_WORD",
      "position" : 3
    }
  ]
}

可以通过elasticsearch-plugin list来查看您所装的插件

GET _analyze
{
  "analyzer": "ik_max_word",
  "text":"信老韩得永生"
}

{
  "tokens" : [
    {
      "token" : "信",
      "start_offset" : 0,
      "end_offset" : 1,
      "type" : "CN_CHAR",
      "position" : 0
    },
    {
      "token" : "老",
      "start_offset" : 1,
      "end_offset" : 2,
      "type" : "CN_CHAR",
      "position" : 1
    },
    {
      "token" : "韩",
      "start_offset" : 2,
      "end_offset" : 3,
      "type" : "CN_CHAR",
      "position" : 2
    },
    {
      "token" : "得",
      "start_offset" : 3,
      "end_offset" : 4,
      "type" : "CN_CHAR",
      "position" : 3
    },
    {
      "token" : "永生",
      "start_offset" : 4,
      "end_offset" : 6,
      "type" : "CN_WORD",
      "position" : 4
    }
  ]
}

自己定义字典的分词器

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

老韩
信老韩

<entry key="ext_dict">han.dic</entry>

重新启动

GET _analyze
{
  "analyzer": "ik_max_word",
  "text":"信老韩得永生"
}

{
  "tokens" : [
    {
      "token" : "信老韩",
      "start_offset" : 0,
      "end_offset" : 3,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
      "token" : "老韩",
      "start_offset" : 1,
      "end_offset" : 3,
      "type" : "CN_WORD",
      "position" : 1
    },
    {
      "token" : "得",
      "start_offset" : 3,
      "end_offset" : 4,
      "type" : "CN_CHAR",
      "position" : 2
    },
    {
      "token" : "永生",
      "start_offset" : 4,
      "end_offset" : 6,
      "type" : "CN_WORD",
      "position" : 3
    }
  ]
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容