Manticore Search 3.1.0 版引入了一种基于ICU 文本分割算法的中文文本分割新方法,该算法遵循第二种方法 - 基于字典的分割。
ICU 是一组开源库,为软件应用程序提供 Unicode 和全球化支持。与许多其他功能一起,它解决了文本边界确定的任务。 ICU 算法在文本范围内定位单词、句子、段落的位置,或者在显示文本时识别适合换行的位置。
本文截稿时,在 Manticore 的讨论区很多人反馈 ICU 似乎没有 jieba 分词器对中文分词处理的更好,Manticore作者也已经将 jieba 分词器的集成纳入后续的支持计划。
Manticore 中 ICU 分词的算法可以简单描述如下:
-
原始文本被视为符号数组。
-
然后 Manticore 遍历数组,如果找到一组 * 中文符号,它会将其传递给 ICU 库进行处理。
-
中文文本的分段部分替换了原始的未分段部分。
-
其他自然语言处理算法(charset_table、wordforms等)适用于修改后的文本,就像在常见的分割工作流程中一样。
要启用 ICU-Chinese 分词,必须在创建表时添加以下索引配置选项:
-
morphology = ‘icu_chinese’
-
charset_table = ‘chinese’ 或者 charset_table = ‘non_cjk,chinese’
当一篇文章包含中文和英文时可以考虑设置 charset_table = ‘non_cjk,chinese’
1、连接到 manticore
2、创建表
中英文混合时候参考选用
更多字段类型详见官方文档,地址:https://manual.manticoresearch.com/Creating_a_table/Data_types#Character-data-types
3、插入测试数据
4、分词测试
注:从测试 分词结果我们可以看到, 消失了,那是因为我们设定的 只是 ,如果你希望中文和英文都被分词,则你需要设置 ,可以自行测试验证。
5、查询数据
5.1、普通字段查询
5.2、对 string 字段进行正则查询
注:如官方文档中对 REGEX函数的描述 所示,regex 目前只能用于 string 和 json 类型的字段。
5.3、对索引字段使用 match 进行搜索
只有被索引的字段才可以使用 进行搜索, 类型的字段默认为 , 字段默认为 ,但是我们可以手工为 string 字段设置 属性使之也被索引,这样 string 也可以使用 match 匹配搜索。
5.3.1、从所有索引字段搜索
5.3.2、从明确指定的索引字段搜索
5.3.3、同时匹配多个关键字
5.3.4、多个字段并且关系搜索
更多关于全文索引的查询语法,详见官方文档中的 Full text operators 章节。
5.3.4、对 json 字段进行查询
官方提供了JSON字段查询的仿真教学环境,地址为 https://play.manticoresearch.com/json/,更多内容请探索官方手册。
5.4、查看查询的扩展信息
每执行一个查询后,都可以使用 查看执行过的查询的扩展信息,如下所示:
5.5、通过HTTP接口执行SQL语句
manticore 提供了多个HTTP接口可以支持我们直接匹配搜索。但是如果你仍旧比较喜欢使用SQL来执行查询的话,又不想为如何每种不同数据库进行复杂的ODBC配置,那么你可以使用官方提供的一个可以直接执行SQL语句的 HTTP 接口,这个接口提供一个 SQL 语句参数,使用常规的表单的POST方式进行提交,效果如下图所示:
1、提交方式为常规的 form 表单 POST 提交。
2、query 参数为需要执行的 sql 语句,使用 curl 等方式执行时需要进行 url 编码。
3、 为可选参数,如果不指定该参数则query只允许执行SELECT语句。
4、如果提供 ,则可以执行 所有SQL语句,例如 查看表结构、 查看所有表等命令。
5、更多详见官方文档地址:https://manual.manticoresearch.com/Connecting_to_the_server/HTTP#SQL-over-HTTP
实现中文全文搜索看似通过中间件很容易,让分词结果达到自己实际业务期望度并非易事。虽然 Manticore Search 使用 ICU 已经可以轻松的应付大部分中文场景。但是当你深度使用后,可能会发现它对很多自定义词组和灵活组合变幻的中文的支持度仍然达不到我们的预期,对分词的扩展支持目前来说还不够。
不过如文初所述,作者已经计划集成 分词器(issue),相信在不久的将来支持 jieba 后我们能更灵活的自定义中文词库,来尽可能更准确的满足我们对中文分词的实际业务需求。
中文分词的官方互动教程地址:https://play.manticoresearch.com/icu-chinese/