Index
Software
Server
Search
Elasticsearch Mongodb Setup

Elasticsearch Mongodb Setup

ES的使用方法可以参考 https://www.ruanyifeng.com/blog/2017/08/elasticsearch.html

查询所有内容:

curl "http://ip:port/whisper.messages/_search?pretty"

中文分词

分词器安装

目前最常用的中文分词器是 https://github.com/medcl/elasticsearch-analysis-ik

ES 的 helm chart : https://artifacthub.io/packages/helm/elastic/elasticsearch

官方推荐的插件安装方法是包装一个新的镜像,这件事已经有人做了 https://hub.docker.com/r/fahchen/elasticsearch-analysis-ik/

分词使用

需要给对应的索引加上分词的设置,首先查询索引的状态:

curl http://ip:port/whisper.messages/_settings

在对应的字段上启用 ik 分词器。 关于两种 ik 模式(max vs smart)的选择: https://zhuanlan.zhihu.com/p/52543633 ,对于搜索来说似乎 smart 模式会好一些, max 会有比较多的误召。

注意一个索引的analyzer不能动态更新,如果之前已经创建了需要删除之后重建:

curl -XDELETE http://ip:port/whisper.messages

创建带有 ik 分词器的索引 (https://www.elastic.co/guide/en/elasticsearch/reference/current/specify-analyzer.html):

curl -X PUT "http://ip:port/whisper.messages?pretty" -H 'Content-Type: application/json' -d'
{
  "mappings": {
    "properties": {
      "content.text": {
        "type": "text",
        "analyzer": "ik_max_word",
        "search_analyzer": "ik_smart"
      }
    }
  }
}
'

curl -X PUT "http://ip:port/whisper.channels?pretty" -H 'Content-Type: application/json' -d'
{
  "mappings": {
    "properties": {
      "description": {
        "type": "text",
        "analyzer": "ik_max_word",
        "search_analyzer": "ik_smart"
      },
      "name": {
        "type": "text",
        "analyzer": "ik_max_word",
        "search_analyzer": "ik_smart"
      }
    }
  }
}
'

测试分词效果:

curl -XPOST http://ip:port/whisper.messages/_search\?pretty  -H 'Content-Type:application/json' -d'
{
    "query" : { "match" : { "content.text" : "中国" }},
    "highlight" : {
        "pre_tags" : ["<tag1>", "<tag2>"],
        "post_tags" : ["</tag1>", "</tag2>"],
        "fields" : {
            "content.text" : {}
        }
    }
}
'

数据同步

可以通过 https://github.com/rwynn/monstache 来自动同步 MongoDB 和 ES 之间的数据。 配置起来很简单,只需要指定 mongo 和 es 的连接方式,以及要同步的 db.collection 就好,软件本身是一个单一二进制,也可以用 docker 。 如果是第一次启动可以先指定需要全量同步的 collection ,注意同步之前先创建好 ik 索引。

K8S 部署

由于 monstache 的 docker 镜像使用配置文件的方式部署,需要先在集群中创建一个 configmap ,挂载进容器之后使用。

Created by sine at 2022-03-27 08:11:37. Last modification: 2022-05-31 20:37:48
Software