18143453325 在线咨询 在线咨询
18143453325 在线咨询
所在位置: 首页 > 营销资讯 > 电子商务 > 请大神推荐符合描述的中文全文检索引擎有哪些?

请大神推荐符合描述的中文全文检索引擎有哪些?

时间:2023-04-02 06:20:01 | 来源:电子商务

时间:2023-04-02 06:20:01 来源:电子商务

一直有人私信咨询mysql全文索引问题,我单独写了一篇实现方法:




以下是我5年前的原回答:

========================

关于中文全文索引引擎,我用过MYSQL、迅搜、sphinx、coreseek、SFC、solr。每一样都从头摸到尾,我来说说你的问题。
1、先来说coreseek
coreseek是老版本的sphinx的中文版本。因为sphinx不支持中文字符,不支持的原因是:gbk 2字节,utf8 3字节,sphinx是俄罗斯基佬写的,不是很了解中文的情况(韩文日文使用也存在一样的问题)
coreseek 版本5一直难产,做了2-3年了一直没有发布。这恐怕是越来越多人放弃的原因吧。

和coreseek一样,还有一个sphinx中文改进版叫做:SFC:sphinx for chinese。在这里:sphinx-for-chinese sphinx-search.com
不管是SFC还是CORESEEK,大致原理都是做一份字典,在简历索引的时候根据这份字典来。
举个例子:
“中文全文检索引擎”,在做索引的时候是这样的:中文/全文检索/引擎
“/”隔开的每个词是一个主题,搜“全文检索”的时候可以匹配到,搜“全文”的时候匹配不到。
为了改变这个问题,只能制作更低粒度的字典,比如在字典里面加入:“全文”和“检索” 2个词

可能存在的bug是这样的:

“杭州市长春药店”,在做索引的时候如果这样的:杭州/市长/春药店
这样分割的话,搜:“长春”就搜不出来了。

这恐怕是大部分采用字典做全文索引的工具的通病,解决办法就是不断的修改和训练字典。

2、sphinx使用中文的办法
sphinx也并非无法支持中文,只要你告诉sphinx,哪些3字节的utf8中文是不可分割的,sphinx就可以切割的很好。
sphinx支持中文的一个牺牲是:只能做一元索引(针对单字做索引),索引速度慢,查询的时候耗费资源。

当然也带来一个好处是:100%的召回率。还是上面的例子,不管你是搜:“市长”还是“长春”,都有办法查到。
sphinx如果支持中文一元索引,请看这里:Coreseek开源中文检索引擎-Sphinx中文版

3、关于你说的过滤逻辑太简单
我不知道具体是怎么回事,根据我使用的情况,想要的任何查询方式,sphinx或者coreseek都支持。
我估计下面这些知识你可能不了解:
a.匹配模式
SPH_MATCH_ALL,匹配所有查询词(缺省模式)
SPH_MATCH_ANY,匹配任意查询词
SPH_MATCH_PHRASE,短语匹配
SPH_MATCH_BOOLEAN,布尔表达式匹配
SPH_MATCH_EXTENDED,查询匹配一个Sphinx内部查询语言表达式
b.布尔查询允许使用下面特殊操作符:
AND:hello & world
OR:hello | world
NOT:hello -world或hello !world
Grouping:(hello world)
c.扩展查询允许合我下面特殊操作符:

操作符OR:hello | world
操作符NOT:hello -world或hello !world
字段搜索操作符:@title hello @body world
短语(phrase)搜索符:”hello world”
临近(proximity)搜索符:”hello world”~10

d.除此之外还支持:权重(匹配度,Weight),mysql扩展,分布式等等。
列出这么多,希望你可以去查一查资料

4、关于性能
我的机器可能比较好一些,我负责跑sphinx的那个机器配置是 24核心CPU,8G内存,SSD硬盘
建立索引方面,我采用分布式:每4000万短语(注意是短语)索引速度大约是6分钟
载入速度方面是索引的速度的1/4
查询速度实际和你的数据多少无关,你可以在查询语句里面用max_match控制返回最大数量。及时我把这个数量调大到1000万的时候,返回30万结果一次2分钟(机械硬盘目测6-8分钟,我的机器比较好)。如果返回记录少,速度更快,基本上1万结果5秒返回。返回不是输出的意思,因为数据多的时候,CPU要合并数据并且从寄出去放到内存里面。

5、我不知道你的一亿数据是什么,如果是关键词那跟我情况差不多。

6、上面说到很多sphinx,你可以把它等同于coreseek

最后,我觉得你对这个东西了解还太少,给你的建议是,
1.先把Coreseek开源中文检索引擎-Sphinx中文版上全部文档读一遍,理解透彻。
2.针对文档中的每个主题,上网查找相关技术文档,都啃一遍
3.把coreseek论坛上回复数量多的帖子都读一遍
4.英文可以的话,把这个也尝试阅读一下:Documentation

最后,不管你用什么引擎,你都得摸索,有的路人多好走,有的路走的人少,看起来几乎走不通。荆棘之路,你要自己开拓,才能看到风景。我已经在路这头看风景,这边人不多(据我所知腾讯大量使用sphinx),希望看到你的身影。

关键词:索引,中文,推荐,符合

74
73
25
news

版权所有© 亿企邦 1997-2025 保留一切法律许可权利。

为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
关闭