使用elasticsearch完成多语言搜索的三种方式

文档目标:

        基于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&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值