本文将基于业务实践的角度,详细介绍 analysis-ansj 插件在 TongSearch 中的应用、安装及注意事项。

插件功能介绍

analysis-ansj 是基于开源项目 Ansj 中文分词构建的 TongSearch 插件。它旨在为 TongSearch 提供准确、高效的中文分词能力,支持自定义词典,能较好地满足通用领域的中文搜索需求。

功能包括:

  • 语义切分:将连续的中文文本切分成有意义的词语(Term),而非单个字。例如,将“高性能服务器”切分为“高性能”、“服务器”,而非“高”、“性”、“能”、“服”、“务”、“器”。

  • 提高搜索相关性:基于有意义的词语建立倒排索引,使得用户的搜索意图能更准确地匹配到文档。

支持的主要分词模式

Ansj 提供了多种分词方式,在 TongSearch 中常用的有:

  • index_ansj (索引模式):细粒度切分,尽可能多地切出可能的词组合,适合用于建立索引,以提高召回率。

  • query_ansj (查询模式):粗粒度切分,更符合人类的自然语言查询习惯,适合用于搜索查询分析。

  • dic_ansj (用户自定义模式):优先使用用户自定义词典进行切分。

使用场景

适合使用的场景

  • 通用内容搜索:如新闻资讯、社区帖子、商品描述等通用中文文本的全文检索。

  • 混合搜索:需要同时支持中文和英文数字的搜索场景(Ansj 对英文和数字也有基本的处理能力)。

  • 需要自定义干预的场景:业务中有特定的行业术语或新词,需要通过自定义词典来强制分词。

插件安装

安装方式

方法一:使用命令行安装 

将下载好的插件 zip 包上传至服务器特定目录 (例如 /tmp/),然后使用 tongsearch-plugin 命令安装。

./bin/tongsearch-plugin install file:///tmp/tongsearch-analysis-ansj-{version}.zip

方法二:手动解压安装

可以直接将 zip 包解压到 TongSearch 安装目录下的 plugins 文件夹中。

unzip /tmp/tongsearch-analysis-ansj-{version}.zip -d analysis-ansj/

多节点集群中的注意事项

对于集群环境,必须在集群中的每一个节点上都执行安装操作,并确保插件文件存在于每个节点的 plugins 目录下。安装完成后,需要逐台重启 TongSearch 节点以使插件生效。

安装完成后的验证方式

重启完成后,可以通过以下 REST API 查看已安装的插件列表,确认 analysis-ansj 是否在其中:

curl -X GET "localhost:9200/_cat/plugins?v"

如果输出中包含 analysis-ansj,则说明安装成功。

具体实践

下面通过一个简单的示例,展示如何创建使用 Ansj 分词器的索引,并对比其与默认分词器的效果差异。

我们创建一个名为 test_ansj 的索引,其中 title 字段使用 index_ansj 分析器用于索引,使用 query_ansj 分析器用于查询。

curl -X PUT "localhost:9200/test_ansj" -H 'Content-Type: application/json' -d'
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 0
  },
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "analyzer": "index_ansj",
        "search_analyzer": "query_ansj"
      }
    }
  }
}
'

效果对比

为了直观感受分词的效果,我们可以使用 _analyze API 来查看不同分词器对同一段文本的处理结果。

  • 默认 standard 分词器

curl -X GET "localhost:9200/_analyze?pretty" -H 'Content-Type: application/json' -d'
{
  "analyzer": "standard",
  "text": "TongSearch高性能服务器"
}
'

输出结果会将文本切分为单个字符:tongsearch, , , , , , 。这种切分会导致搜索 "服务器" 时无法精确匹配,只能匹配到包含单个字的结果。

  • Ansj 分词器

curl -X GET "localhost:9200/test_ansj/_analyze?pretty" -H 'Content-Type: application/json' -d'
{
  "field": "title",
  "text": "TongSearch高性能服务器"
}
'

输出结果会切分为有意义的词:tongsearch, 高性能, 服务器。基于这样的词项建立索引,搜索的准确性将大幅提升。

下图形象地展示了使用不同分词器在搜索时的效果对比:

小结

analysis-ansj 是提升 TongSearch 中文搜索质量的利器。通过合理配置和使用不同的分词模式,结合自定义词典,可以显著改善用户的搜索体验。同时掌握词典更新和重建索引的流程,是保障线上搜索服务稳定可靠的关键。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐