栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

【Go】elasticsearch + go-mysql-elasticsearch 实现中文分词、高亮效果

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Go】elasticsearch + go-mysql-elasticsearch 实现中文分词、高亮效果

引言

本文使用的开源项目库如下:1.MySQL数据实时同步到elasticsearch的工具库:go-mysql-elasticsearch
2.elasticsearch 中文分词插件:elasticsearch-analysis-ik

温馨提示:本文使用的是7.17.3版本的elasticsearch,故安装的IK分词器插件也是7.17.3版本的,小伙伴们可以根据自身elasticsearch版本的需要到elasticsearch-analysis-ik仓库的Release页面选择适合的插件版本进行安装。

准备工作
  • bitnami/elasticsearch:7 容器的安装

    为了方便开发管理,我选择了把elasticsearch安装到docker容器当中

安装的docker-compose.yml文化如下

version: '3'

services:
  elasticsearch:
    container_name: elasticmy
    image: docker.io/bitnami/elasticsearch:7
    ports:
      - '9200:9200'
      - '9300:9300'
    volumes:
      - './elasticsearch_data:/bitnami/elasticsearch/data'
volumes:
  elastic3:
    driver: local

容器启动方式:

docker-compose up -d

如果容器无法正常启动,则可能需要给宿主主机的elastic_data目录赋予权限

chmod 777 elasticsearch_data
  • 为elasticsearch安装安装中文分词器插件
  1. 以root身份进入到elasticsearch容器中
docker exec -u root -it elasticmy bash
  1. 进入容器后,在容器的/bin目录下执行安装分词器插件命令
elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.17.3/elasticsearch-analysis-ik-7.17.3.zip
  1. 安装完毕后重启elasticsearch容器,至此elasticsearch的分词器插件就安装完毕了
docker restart elasticmy
  • 在elasticsearch中创建对应的索引
## 这里的索引名称我和MySQL中对应的数据库名称同名
## 使用include_type_name 是为了可以预先自定义索引的_type,不自定义的话,elasticsearch
## 会默认生成名称为_doc的_type
PUT  myblog?include_type_name=true  
{
    "mappings": {
        "t_article": {  // 自定义的_type,这里我选择其名称和数据库要同步的表名相同
            "properties": {
                "article_content": {// 为文档中的article_content字段设置分词器
                    "type": "text",
                    "analyzer": "ik_max_word",
                    "fielddata": true
                },
                "article_title": {// 为文档中的article_title字段设置分词器
                    "type": "text",
                    "analyzer": "ik_max_word",
                    "fielddata": true
                }
            }
        }
    }
}
  • 使用go-mysql-elasticsearchs实时同步MySQL中myBlog数据库中的t_article表中的数据到elasticsearch中
  1. 先拉取go-mysql-elasticsearch的代码
git clone https://github.com/go-mysql-org/go-mysql-elasticsearch.git
  1. 进入代码的根目录对代码进行编译
make
  1. 编译成功后会在代码根目录下的bin目录下生成go-mysq-elasticsearch的可执行程序:

  1. 编写代码根目录下的river.toml配置文件,建立其elasticsearch和MySQL同步的桥梁,其中除了配置好elasticsearch和MySQL的服务地址信息外,最关键的配置项就是rule配置项了,在本文中的涉及的实际例子中进行如下配置(读者小伙伴需要根据自身的数据结构进行相应的定义)

    [[rule]]
    schema = "myBlog"// 要同步的数据库名称
    table = "t_article" // 要同步的数据库表
    index = "myBlog" // 同步到elasticsearch中的索引名称
    type = "t_article" // 同步到elasticsearch中的_type名称
    
  2. 运行./bin/go-mysql-elasticsearch目录下的程序开始进行同步

进行数据的高亮搜索
  1. 进行高亮搜索
GET  myblog/_search

{
    "query": {
        "bool": {
            "should": [
                {
                    "multi_match": {
                        "query": "加锁",//搜索的关键词
                        "fields": [ // 要进行搜索的字段
                            "article_content",
                            "article_title"
                        ]
                    }
                }
            ],
            "minimum_should_match": 1
        }
    },
    "highlight": {
        "fields": {
            "article_content": {},//高亮的字段
            "article_title": {}//高亮的字段
        },
        "pre_tags": ""color: red">", //高亮左标记
        "post_tags": "" // 高亮右标记
    }
}
  1. 高亮且分词的搜索结果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/884772.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号