文档目标:
基于elasticsearch,实现不同语言搜索特定语言的文档数据;比如输入中文的内容,搜索中文文档数据,输入英文搜索英文文档数据,日韩文类似
方案概述:
方式一:不同的语言使用不同的索引
方式二:使用多字段处理不同语言
方式三:语言检测处理器
目录:
* elasticsearch docker-compose部署
* 中日韩分词插件的安装
* 使用不同的索引保存不同语言文档,并进行搜索
* 使用多字段处理不同语言进行搜索
* 使用语言检测处理器处理文档并进行搜索
* 结论
elasticsearch docker-compose部署
version: "3.1"
# 服务配置
services:
elasticsearch:
container_name: es01
image: elasticsearch:8.12.2
# restart: unless-stopped
environment:
- "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"
- "TZ=Asia/Shanghai"
- "discovery.type=single-node"
- "ELASTIC_PASSWORD=123456"
ports:
- "9200:9200"
- "9300:9300"
volumes:
# - ./config:/usr/share/elasticsearch/config
- elastic-data:/usr/share/elasticsearch/data
- ./plugins:/usr/share/elasticsearch/plugins
networks:
- elastic_net
kibana:
container_name: kibana01
image: kibana:8.12.2
# restart: unless-stopped
environment:
- "TZ=Asia/Shanghai"
- "I18N_LOCALE=zh-CN"
- "ELASTICSEARCH_HOSTS=http://elasticsearch:9200"
- "ELASTICSEARCH_USERNAME=test"
- "ELASTICSEARCH_PASSWORD=123456"
ports:
- "5601:5601"
#volumes:
#- ./kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml
networks:
- elastic_net
depends_on:
- elasticsearch
# 网络配置
networks:
elastic_net:
driver: bridge
# docker 卷
volumes:
elastic-data:
注:启动后需要登录es01容器进行添加用户角色操作:
docker exec -it es01 bash
elasticsearch-users useradd test
elasticsearch-users roles -a superuser test
elasticsearch-users roles -a kibana_system test
中日韩分词插件的安装(默认是英文分词器)
分在线安装和离线安装,下面提供一个在线安装方式:
# 中文插件ik安装
./bin/elasticsearch-plugin install https://github.com/infinilabs/analysis-ik/releases/download/v8.12.2/elasticsearch-analysis-ik-8.12.2.zip
# 日语分词器安装
bin/elasticsearch-plugin install analysis-kuromoji
# 韩语分词器
bin/elasticsearch-plugin install analysis-nori
使用不同的索引保存不同语言文档,并进行搜索
这里提供一个python代码示例,日韩分词器类似:
#coding=utf-8
from elasticsearch import Elasticsearch
# 创建Elasticsearch客户端
# es = Elasticsearch()
# 实例化一个ip为localhost,端口为9200,允许超时一小时的es对象
es = Elasticsearch(hosts="localhost", port=9200, timeout=3600, http_auth=('test', '123456'))
# 创建一个中文索引,并指定分词器
chinese_index = es.indices.create(index="my_chinese_index&