sphinx
(1)Sphinx简介
Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。Sphinx特别为一些脚本语言设计搜索API接口,如PHP,Python,Perl,Ruby等,同时为MySQL也设计了一个存储引擎插件。
Sphinx单一索引最大可包含1亿条记录,在1千万条记录情况下的查询速度为0.x秒(毫秒级)。Sphinx创建索引的速度为:创建100万条记录的索引只需3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。
(2)Sphinx工作流程图:
(3)流程图解释:
Database:数据源,是Sphinx做索引的数据来源。因为Sphinx是无关存储引擎、数据库的,所以数据源可以是MySQL、PostgreSQL、XML等数据。
Indexer:索引程序,从数据源中获取数据,并将数据生成全文索引。可以根据需求,定期运行Indexer达到定时更新索引的需求。
Searchd:Searchd直接与客户端程序进行对话,并使用Indexer程序构建好的索引来快速地处理搜索查询。
APP:客户端程序。接收来自用户输入的搜索字符串,发送查询给Searchd程序并显示返回结果。
(4)Sphinx原理:
Sphinx的整个工作流程就是Indexer程序到数据库里面提取数据,对数据进行分词,然后根据生成的分词生成单个或多个索引,并将它们传递给searchd程序。然后客户端可以通过API调用进行搜索。
CoreSeek
(1)CoreSeek简介
Coreseek 的开发工作类似Sphinx(起始于2001年),可以上溯到2006年,当时试图为一个数据库驱动的网站寻找一个可接受的中文搜索的解决方案,但是当时没有任何方案能够完全而又直接的满足要求。事实上,主要是如下问题:
---搜索质量(例如:类似Google的有效的相关度算法) 单纯的统计学方法的效果非常糟糕,特别是在大量的短篇文档的集合上,例如:论坛、博客等等
---搜索速度 特别是当搜索的短语包括"停止词"时,表现的尤其明显,例如:"to be or not to be"
---建立索引时,可控的磁盘和CPU消耗 在现有硬件的环境下,这一点的重要性要超过对索引构造速度的要求。
---中文搜索的准确性和效率 因为众所周知的原因,只有准确的中文分词才能提高中文搜索的准确性,并大大降低计算量。
(2)CoreSeek原理
Coreseek为应用提供全文检索功能,目前的版本(2.x 3.x)基于Sphinx,支持使用Python定义数据源,支持中文分词。coreseek集合了sphinx的功能,支持更多的数据源,在字典,建立索引,分词更好的支持中文。可以这样理解,coreseek就是支持中文的sphinx全文检索