TongSearch:analysis-ansj实践指南
是基于开源项目 Ansj 中文分词构建的 TongSearch 插件。它旨在为 TongSearch 提供准确、高效的中文分词能力,支持自定义词典,能较好地满足通用领域的中文搜索需求。功能包括:语义切分:将连续的中文文本切分成有意义的词语(Term),而非单个字。例如,将“高性能服务器”切分为“高性能”、“服务器”,而非“高”、“性”、“能”、“服”、“务”、“器”。提高搜索相关性:基于有意义的词
本文将基于业务实践的角度,详细介绍 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 中文搜索质量的利器。通过合理配置和使用不同的分词模式,结合自定义词典,可以显著改善用户的搜索体验。同时掌握词典更新和重建索引的流程,是保障线上搜索服务稳定可靠的关键。
更多推荐
所有评论(0)