Elasticsearchik分词器安装SpringBoot整合docker安装ESKibananginx
Posted 李潘杜若
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearchik分词器安装SpringBoot整合docker安装ESKibananginx相关的知识,希望对你有一定的参考价值。
一、简介
Elasticsearch 是一个分布式的免费开源搜索和分析引擎,适用于包括文本、数字、地理空间、结构化和非结构化数据等在内的所有类型的数据。Elasticsearch 在 Apache Lucene 的基础上开发而成,由 Elasticsearch N.V.(即现在的 Elastic)于 2010 年首次发布。Elasticsearch 以其简单的 REST 风格 API、分布式特性、速度和可扩展性而闻名,是 Elastic Stack 的核心组件;Elastic Stack 是一套适用于数据采集、扩充、存储、分析和可视化的免费开源工具。人们通常将 Elastic Stack 称为 ELK Stack(代指 Elasticsearch、Logstash 和 Kibana),目前 Elastic Stack 包括一系列丰富的轻量型数据采集代理,这些代理统称为 Beats,可用来向 Elasticsearch 发送数据。
Elastic 的底层是开源库 Lucene。但是,你没法直接用 Lucene,必须自己写代码去调用它的
接口。Elastic 是 Lucene 的封装,提供了 REST API 的操作接口,开箱即用。
REST API:天然的跨平台。
官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
官方中文:https://www.elastic.co/guide/cn/elasticsearch/guide/current/foreword_id.html
二、Docker 安装 Es和Kibana
-
拉取镜像文件
# 存储和检索数据 docker pull elasticsearch:7.4.2 # 可视化检索数据 docker pull kibana:7.4.2
-
配置挂载数据文件夹
# 创建配置文件目录 mkdir -p /mydata/elasticsearch/config # 创建数据目录 mkdir -p /mydata/elasticsearch/data # 将/mydata/elasticsearch/文件夹中文件都可读可写 chmod -R 777 /mydata/elasticsearch/ # 配置任意机器可以访问 elasticsearch echo "http.host: 0.0.0.0" >/mydata/elasticsearch/config/elasticsearch.yml
-
启动Elasticsearch
docker run --name elasticsearch --restart=always -p 9200:9200 -p 9300:9300 \\ -e "discovery.type=single-node" \\ -e ES_JAVA_OPTS="-Xms64m -Xmx512m" \\ -v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \\ -v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \\ -v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \\ -d elasticsearch:7.4.2 # -p 9200:9200 -p 9300:9300:向外暴露两个端口,9200用于HTTP REST API请求,9300 ES 在分布式集群状态下 ES 之间的通信端口; # -e "discovery.type=single-node":es 以单节点运行 # -e ES_JAVA_OPTS="-Xms64m -Xmx512m":设置启动占用内存,不设置可能会占用当前系统所有内存 # -v:挂载容器中的配置文件、数据文件、插件数据到本机的文件夹; # -d elasticsearch:7.6.2:指定要启动的镜像 #访问 IP:9200 看到返回的 json 数据说明启动成功。
-
启动可视化Kibana
docker run --name kibana --restart=always \\ -e ELASTICSEARCH_HOSTS=http://192.168.0.11:9200 \\ -p 5601:5601 \\ -d kibana:7.4.2 # -e ELASTICSEARCH_HOSTS=http://192.168.0.11:9200: 这里要设置成自己的虚拟机IP地址 # http://192.168.0.11:5601/
三、安装ik分词器
注意:下载ES对应版本的ik分词器
1. ik分词器下载地址:
https://github.com/medcl/elasticsearch-analysis-ik/releases
2. 解压.ZIP—>移动到Es容器内部 plugins 目录下
3. 授权
chmod -R 777 ik
4. 重启ES
5. 测试分词器
POST _analyze
"analyzer": "ik_smart",
"text": "我是中国人"
POST _analyze
"analyzer": "ik_max_word",
"text": "我是中国人"
6.自定义词库(这里需安装nginx)
#修改/usr/share/elasticsearch/plugins/ik/config/中的 IKAnalyzer.cfg.xml
vim /mydata/elasticsearch/plugins/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"></entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords"></entry>
<!--用户可以在这里配置远程扩展字典 -->
<!-- <entry key="remote_ext_dict">words_location</entry> -->
<!--用户可以在这里配置远程扩展停止词字典-->
<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
#修改过后的
<?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>
<!--用户可以在这里配置远程扩展字典-->
<!--nginx 发布静态资源,按照请求路径,创建对应的文件夹以及文件,放在 nginx 的 html下-->
<entry key="remote_ext_dict">http://192.168.1.123/es/fenci.txt</entry>
<!--用户可以在这里配置远程扩展停止词字典-->
<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
重启ES
四、Docker安装 nginx
- 随便启动一个 nginx 实例,只是为了复制出配置
docker run -p 80:80 --name nginx -d nginx:1.10
- 将容器内的配置文件拷贝到当前目录
docker container cp nginx:/etc/nginx .
- 修改文件名称:mv nginx conf 把这个 conf 移动到/mydata/nginx 下
- 终止原容器:docker stop nginx
- 执行命令删除原容器:docker rm nginx
- 创建新的 nginx;执行以下命令
docker run -p 80:80 --name nginx \\
-v /mydata/nginx/html:/usr/share/nginx/html \\
-v /mydata/nginx/logs:/var/log/nginx \\
-v /mydata/nginx/conf:/etc/nginx \\
-d nginx:1.10
- 给 nginx 的 html 下面放的所有资源可以直接访问
vim index.html
#写测试文字,例:如下所示
<h1>Hello Nginx</h1>
五、检索格式
1、检索信息
GET bank/_search #检索 bank 下所有信息,包括 type 和 docs
GET bank/_search?q=*&sort=account_number:asc #请求参数方式检索
响应结果
took - Elasticsearch 执行搜索的时间(毫秒)
time_out - 告诉我们搜索是否超时
_shards - 告诉我们多少个分片被搜索了,以及统计了成功/失败的搜索分片
hits - 搜索结果
hits.total - 搜索结果
hits.hits - 实际的搜索结果数组(默认为前 10 的文档)
sort - 结果的排序 key(键)(没有则按 score 排序)
score 和 max_score –相关性得分和最高得分(全文检索用)
2、_cat
GET /_cat/nodes: #查看所有节点
GET /_cat/health: #查看 es 健康状况
GET /_cat/master: #查看主节点
GET /_cat/indices:#查看所有索引 show databases;
3、样本测试数据
https://gitee.com/xlh_blog/common_content/blob/master/es%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE.json
4、插入(导入)测试数据
POST bank/account/_bulk
#测试数据
六、SpringBoot整合
官网:https://www.elastic.co/guide/en/elasticsearch/client/index.html
1、导入依赖
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.4.2</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.4.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>7.4.2</version>
<scope>compile</scope>
</dependency>
2、编写配置文件
public static final RequestOptions COMMON_OPTIONS;
static
RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();
/*builder.addHeader("Authorization", "Bearer " + TOKEN);
builder.setHttpAsyncResponseConsumerFactory(
new HttpAsyncResponseConsumerFactory
.HeapBufferedResponseConsumerFactory(30 * 1024 * 1024 * 1024));*/
COMMON_OPTIONS = builder.build();
@Bean
RestHighLevelClient client()
RestClientBuilder builder = RestClient.builder(new HttpHost("192.168.1.123", 9200, "http")); return new RestHighLevelClient(builder);
3、测试
/**
* 检索测试
*/
@Test
public void searchData() throws IOException
//1、创建检索请求
SearchRequest searchRequest = new SearchRequest();
//指定索引
searchRequest.indices("bank");
//检索条件
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
//1.1、构造检索条件
searchSourceBuilder.query(QueryBuilders.matchQuery("address","mill"));
System.out.println(searchSourceBuilder.toString());
searchRequest.source(searchSourceBuilder);
//2、执行检索
SearchResponse searchResponse = client.search(searchRequest, ElasticSearchConfig.COMMON_OPTIONS);
//3、分析结果searchResponse
System.out.println(searchResponse.toString());
/**
* 测试存储数据到es
* 更新也可以
*/
@Test
public void indexData() throws IOException
IndexRequest indexRequest = new IndexRequest("users");
indexRequest.id("1"); //数据id
//indexRequest.source("username","zhangsan","age",18,"gender","男");
User user = new User();
user.setUserName("zhangsan");
user.setAge(18);
user.setGender("男");
String jsonString = JSON.toJSONString(user);
indexRequest.source(jsonString, XContentType.JSON);//要保存的内容
//执行操作
IndexResponse index = client.index(indexRequest, ElasticSearchConfig.COMMON_OPTIONS);
System.out.println(index);
@Data
class User
private String userName;
private String gender;
private Integer age;
以上是关于Elasticsearchik分词器安装SpringBoot整合docker安装ESKibananginx的主要内容,如果未能解决你的问题,请参考以下文章
2021年大数据ELK:Elasticsearch安装IK分词器插件