ElasticSearch 实现分词全文检索 - ES、Kibana、IK分词器安装

elasticsearch,实现,分词,全文检索,es,kibana,ik,分词器,安装 · 浏览次数 : 507

小编点评

**内容生成排版** * 使用简单的排版格式,例如缩进、字体大小等。 * 使用行内缩进,缩进代码等。 * 使用标题,分隔内容等。 **排版示例** ``` **标题** 这是一段标题 **内容** 这是一段内容 **代码** ``` //缩进 foo foo bar //字体大小 foo foo bar { font-size: 16px; } //行内缩进 foo foo bar { font-size: 16px; line-height: 16px; } //标题

这是一段标题

//分隔

**内容** 这是一段内容 **代码** ``` //标题

这是一段标题

//分隔


**内容** 这是一段内容 **代码** ``` //标题

这是一段标题

//分隔

**内容** 这是一段内容 **代码** ``` //标题

这是一段标题

//分隔


**内容** 这是一段内容 **代码** ``` //标题

这是一段标题

//分隔

**内容** 这是一段内容 **代码** ``` //标题

这是一段标题

//分隔


**内容** 这是一段内容 **代码** ``` //标题

这是一段标题

//分隔


**内容** 这是一段内容 **代码** ``` //标题

这是一段标题

//分隔


**内容** 这是一段内容 **代码** ``` //标题

这是一段标题

//分隔


**内容** 这是一段内容 **代码** ``` //标题

这是一段标题

//分隔


**内容** 这是一段内容 **代码** ``` //标题

这是一段标题

//分隔


**内容** 这是一段内容 **代码** ``` //标题

这是一段标题

//分隔


**内容** 这是一段内容 **代码** ``` //标题

这是一段标题

//分隔


**内容** 这是一段内容 **代码** ``` //标题

这是一段标题

//分隔


**内容** 这是一段内容 ```

正文

目录

ElasticSearch 实现分词全文检索 - 概述
ElasticSearch 实现分词全文检索 - ES、Kibana、IK安装
ElasticSearch 实现分词全文检索 - Restful基本操作
ElasticSearch 实现分词全文检索 - Java SpringBoot ES 索引操作
ElasticSearch 实现分词全文检索 - Java SpringBoot ES 文档操作
ElasticSearch 实现分词全文检索 - 测试数据准备
ElasticSearch 实现分词全文检索 - term、terms查询
ElasticSearch 实现分词全文检索 - match、match_all、multimatch查询
ElasticSearch 实现分词全文检索 - id、ids、prefix、fuzzy、wildcard、range、regexp 查询
ElasticSearch 实现分词全文检索 - Scroll 深分页
ElasticSearch 实现分词全文检索 - delete-by-query
ElasticSearch 实现分词全文检索 - 复合查询
ElasticSearch 实现分词全文检索 - filter查询
ElasticSearch 实现分词全文检索 - 高亮查询
ElasticSearch 实现分词全文检索 - 聚合查询 cardinality
ElasticSearch 实现分词全文检索 - 经纬度查询
ElasticSearch 实现分词全文检索 - 搜素关键字自动补全(suggest)
ElasticSearch 实现分词全文检索 - SpringBoot 完整实现 Demo 附源码

安装 ElasticSearch

Docker ElasticSearch

详见 Docker 安装 Elasticsearch、Kibana

Docker Compose 安装

或者 使用 docker compose 安装

[root@localhost ~]# docker-compose version
bash: docker-compose: 未找到命令...

docker compose 下载地址:https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-x86_64

将 docker-compose-Linux-x86_64 传到 /usr/local/bin 目录下,并改名为 docker-compose
image

[root@localhost ~]# chmod +x /usr/local/bin/docker-compose
[root@localhost ~]# docker-compose version
Docker Compose version v2.16.0

Docker Compose ElasticSearch

在目录 /opt/elasticsearch (目录自定义)下创建 docker-compose.yml 文件内容如下

version: "7.9.3"
services:
  elasticsearch:
    image: elasticsearch:7.9.3
    restart: always
    container_name: elasticsearch
    ports:
      - 9200:9200
    volumes:
      - /opt/elasticsearch/logs:/usr/share/elasticsearch/logs
  kibana:
    image: kibana:7.9.3
    restart: always
    container_name: kibana
    ports:
      - 5601:5601
    environment:
      - elasticsearch url=http://172.16.3.88:9200
      - I18N_LOCALE=zh-CN
    depends_on:
      - elasticsearch

执行命令

[root@localhost ~]# cd /opt/elasticsearch
[root@localhost elasticsearch]# pwd
/opt/elasticsearch
#安装
[root@localhost elasticsearch]# docker-compose up -d
[+] Running 0/24
 ⠇ elasticsearch Pulling                                                                                    42.8s
   ⠇ 3c72a8ed6814 Downloading [=================================>                 ]   5...                  26.9s
   ⠇ e0812c7c6d71 Download complete                                                                         26.9s
   ⠇ ae1d3d20a65c Download complete                                                                         26.9s
   ⠇ f38df76a58b2 Downloading [====>                                              ]  28...                  26.9s
   ⠇ 2eca3bea9f3c Download complete                                                                         26.9s
   ⠇ 8d0e26c84dc9 Download complete                                                                         26.9s
   ⠇ 739cff10e6d4 Download complete                                                                         26.9s
   ⠇ ebb4b2f0826b Download complete                                                                         26.9s
   ⠇ a93ad4ceb967 Download complete                                                                         26.9s
 ⠧ kibana Pulling                                                                                           42.8s
   ⠧ 55b131d31acb Downloading [======================================>            ]  17...                  26.7s
   ⠧ b8d3f5b80820 Waiting                                                                                   26.7s
   ⠧ ce01809aac54 Waiting                                                                                   26.7s
   ⠧ cd62ae8b2560 Waiting                                                                                   26.7s
   ⠧ 3f1b4e913944 Waiting                                                                                   26.7s
   ⠧ a14f0f39a444 Waiting                                                                                   26.7s
   ⠧ 6b9eac14d916 Waiting                                                                                   26.7s
   ⠧ 7d309d052637 Waiting                                                                                   26.7s
   ⠧ b35a5bce98d2 Waiting                                                                                   26.7s
   ⠧ d57619633b37 Waiting                                                                                   26.7s
   ⠧ 97c6a30a6480 Waiting                                                                                   26.7s
   ⠧ 1bff97a8e672 Waiting                                                                                   26.7s
   ⠧ 5ffe1970589a Waiting                                                                                   26.7
#查看日志
[root@localhost elasticsearch]# docker-compose logs -f

安装 IK Analysis

ES 默认分词器,对汉字的分词不太友好

下载 ik 分词器插件

找到对应的 Elasticsearch 版本,这里用的:7.9.3,将地址复制到讯雷里下,直接下的话下不动
https://elasticsearch.cn/download/
image
image

方式一:在容器中下载安装

先把zip下载下来。放到任意一台服务器(直接github上下载多数会失败)

# 查看 ES 的容器ID
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE                 COMMAND                  CREATED         STATUS         PORTS                                                                                  NAMES
ad684997e228   elasticsearch:7.9.3   "/tini -- /usr/local…"   7 minutes ago   Up 7 minutes   0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9300->9300/tcp   elasticsearch
# 进入 ES 容器
[root@localhost ~]# docker exec -it ad68 /bin/bash
# 通过命令进行 ElasticSearch 插件安装,不需要重启
[root@ad684997e228 elasticsearch]# elasticsearch-plugin install http://172.16.0.183:8899/Java/elasticsearch-analysis-ik-7.9.3.zip
-> Downloading http://172.16.0.183:8899/Java/elasticsearch-analysis-ik-7.9.3.zip
[=================================================] 100%?? 
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@     WARNING: plugin requires additional permissions     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
* java.net.SocketPermission * connect,resolve
See http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html
for descriptions of what these permissions allow and the associated risks.

Continue with installation? [y/N]y
-> Installed analysis-ik
[root@ad684997e228 elasticsearch]#

方式二:将文件上传至容器,进行安装

将 ik 文件传至服务器

image

将 ik 复制到容器,并安装
# 查看 ES 的容器ID
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE                 COMMAND                  CREATED         STATUS         PORTS                                                                                  NAMES
ad684997e228   elasticsearch:7.9.3   "/tini -- /usr/local…"   7 minutes ago   Up 7 minutes   0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9300->9300/tcp   elasticsearch
# 将it 插件,复制到容器中
[root@localhost ~]# docker cp /opt/elasticsearch-analysis-ik-7.9.3.zip ad684997e228:/usr/share/elasticsearch
# 进入 ES 容器
[root@localhost ~]# docker exec -it ad68 /bin/bash
# 通过命令进行 ElasticSearch 插件安装,不需要重启
[root@ad684997e228 elasticsearch]# elasticsearch-plugin install file:\/usr/share/elasticsearch/elasticsearch-analysis-ik-7.9.3.zip
-> Installing file:/usr/share/elasticsearch/elasticsearch-analysis-ik-7.9.3.zip
-> Downloading file:/usr/share/elasticsearch/elasticsearch-analysis-ik-7.9.3.zip
[=================================================] 100%?? 
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@     WARNING: plugin requires additional permissions     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
* java.net.SocketPermission * connect,resolve
See http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html
for descriptions of what these permissions allow and the associated risks.

Continue with installation? [y/N]y
-> Installed analysis-ik
[root@ad684997e228 elasticsearch]#

重启容器

docker restart xxx

如果不重启会报:failed to find global analyzer [ik_smart]

{
    "error": {
        "root_cause": [
            {
                "type": "illegal_argument_exception",
                "reason": "failed to find global analyzer [ik_smart]"
            }
        ],
        "type": "illegal_argument_exception",
        "reason": "failed to find global analyzer [ik_smart]"
    },
    "status": 400
}

接口测试(Postman)

http://172.16.3.88:9200/_analyze

{
    "analyzer":"ik_smart",
    "text":"心脏搭桥手术"
}

image

Kibana 测试

image

POST _analyze
{
    "analyzer":"ik_smart",
    "text":"心脏搭桥手术"
}

image

与ElasticSearch 实现分词全文检索 - ES、Kibana、IK分词器安装相似的内容:

ElasticSearch 实现分词全文检索 - ES、Kibana、IK分词器安装

先把zip下载下来。放到任意一台服务器(直接github上下载多数会失败)elasticsearch-plugin install http://172.16.0.183:8899/Java/elasticsearch-analysis-ik-7.9.3.zip

ElasticSearch 实现分词全文检索 - 高亮查询

目录 ElasticSearch 实现分词全文检索 - 概述 ElasticSearch 实现分词全文检索 - ES、Kibana、IK安装 ElasticSearch 实现分词全文检索 - Restful基本操作 ElasticSearch 实现分词全文检索 - Java SpringBoot E

ElasticSearch 实现分词全文检索 - 聚合查询 cardinality

目录 ElasticSearch 实现分词全文检索 - 概述 ElasticSearch 实现分词全文检索 - ES、Kibana、IK安装 ElasticSearch 实现分词全文检索 - Restful基本操作 ElasticSearch 实现分词全文检索 - Java SpringBoot E

ElasticSearch 实现分词全文检索 - 经纬度定位商家距离查询

目录 ElasticSearch 实现分词全文检索 - 概述 ElasticSearch 实现分词全文检索 - ES、Kibana、IK安装 ElasticSearch 实现分词全文检索 - Restful基本操作 ElasticSearch 实现分词全文检索 - Java SpringBoot E

ElasticSearch 实现分词全文检索 - Java SpringBoot ES 索引操作

//1. 准备索引的 settings Settings.Builder settings = Settings.builder() //2. 准备索引的结构 Mappings XContentBuilder mappings = JsonXContent.contentBuilder() //3. 将 Settings 和 Mappings 封装到一个Request 对象中

ElasticSearch 实现分词全文检索 - Java SpringBoot ES 文档操作

//准备一个Request对象 IndexRequest request = new IndexRequest(indexName); request.id(person.getId().toString()); //手动指定ID request.source(personJson, XContentType.JSON); //通过 Client 对象执行

ElasticSearch 实现分词全文检索 - 概述

ES 是一个使用Java语言并且基于Lucene编写的搜索引擎框架,他提供了分布式的全文搜索功能,提供了一个统一的基于Restful风格的WEB接口,官方客户端也对多种语言都提供了相应的API。

ElasticSearch 实现分词全文检索 - Scroll 深分页

ES 对 from + size 有限制,两者之和不能超过1W Scroll查询方式,不适合做实时的查询,每次都是从数据文档中的ID去获取,效果高了,但文档中的ID(第二步)不是实时更新的,一般后台管理的方式用 Scroll 比较方便

ElasticSearch 实现分词全文检索 - 搜素关键字自动补全(Completion Suggest)

ES使用Completion Suggest 做关键字自动补全时,实际应用中搜索性能更加高效,建议多开一个子字段,如下示例,假设要根据title字段做关键字自动补全,不要改原字段的类型,多开一个子字段title.suggest,类型设置为completion,然后之后的suggest针对title.suggest字段做操作

ElasticSearch 实现分词全文检索 - id、ids、prefix、fuzzy、wildcard、range、regexp 查询

fuzzy查询:模糊查询,我们输入字符的大概,ES就可以 wildcard 查询:通配查询,和MySQL中的 like 差不多,可以在查询时,在字符串中指定通配符 * 和占位符? range 查询:范围查询,只针对数值类型,对某一个Field进行大于或小于的范围指定查询 regexp 查询: 正则查询,通过你编写的正则表达式去匹配内容