找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 5283|回复: 0

全文检索----coreseek

[复制链接]
发表于 2009-9-15 10:29:11 | 显示全部楼层 |阅读模式
http://www.coreseek.com


1.
全文搜索与数据库搜索的区别

o
专为全文搜索优化,效率更高
由于典型的数据库系统要考虑用户的“增删改查”等多种复杂操作,因此其存取数据的方式需要考察综合考虑各种应用;而全文搜索的数据存取方式只考虑快速读取,相比数据库的查询,要快10倍或更多。(即使启用了数据库内置的全文搜索功能,这个结论仍成立)。
o
支持复杂的查询表达式
数据库系统的查询,往往只支持“AND” 或 "OR" 等有限的模式,而全文检索不但支持"AND"、“OR” 查询,还支持“NOT”、“近似”、“整句”等多种查询方式;同时相比数据库系统,进行在一定范围内查询时也更高效
o
支持按相关度排序
数据库查询出的结果,往往按照数据库内置的排序规则进行排序,往往只能按时间、按点击等有效的排序规则进行;全文搜索除了能够支持数据库的排序规则外,还支持按照结果的相关度排序,这往往会给访问者带来更大的便利。
o
支持中文分词
数据库提供的全文搜索功能往往不支持中文分词(或仅提供二元切分),导致某些短语检索不到或出现大量不相干的数据;中文全文检索系统支持中文分词,进一步过滤了不相干的数据。
2.
自建全文搜索与使用Google等第三方网站提供的站内全文搜索的区别

o
对网站设备有要求
自建全文搜索往往需要站长有至少一台独立主机,而使用第三方提供的全文搜索对站点的要求低,虚拟主机即可;不过,出现全文搜索需求的站点通常已经有自己的独立主机了。
o
索引更新更及时
由于搜索服务在第三方托管,其往往只能按照一定的规则定期更新索引库(往往是几小时、甚至几天才更新一次索引),您网站上的新出现的内容往往不能及时被搜索到;
使用自建全文搜索,可以保证您网站上新出现的内容可以”立即“被检索到。
o
更适应您的网站
由于中文需要进行分词的特性,导致没有一套通用的词库可以适用于全部网站,要得到优秀的检索结果需要定制一套适用于您网站的词库;
采用第三方的搜索服务,您是无法修改第三方厂商的词库的,而使用自建全文搜索则无此问题。
o
更有利于您网站的数据整合
有些网站不止是论坛,往往还包括内容管理(CMS)、商城等多种应用,而使用数据库搜索往往需要用户在各个系统中都进行搜索才能找到内容;
第三方的检索无法区别各个系统的不同。而自建的全文搜索可以有效的区分各个数据来源的不同数据,真正做到一次搜索应有尽有,从而改善您网站的访问体验,增加您网站的点击率。
o
避免您的访问者遇到某些尴尬
第三方的搜索结果页面不是您可以控制修改的,有推荐一些可能会使您网站访问者尴尬的搜索短语的可能。而使用自建全文搜索则完全无此问题。



3.
Coreseek全文检索服务器介绍


1)
Coreseek 全文检索服务器2.0 是在Sphinx基础上开发的全文检索软件,按照GPLv2协议发行。
Sphinx 是SQL Phrase Index的缩写
Sphinx 是一个在GPLv2 下发布的一个全文检索引擎,
当前系统内置MySQL和PostgreSQL 数据库数据源的支持,也支持从标准输入读取特定格式
的XML数据。搜索API支持PHP、Python、Perl、Rudy和Java,并且也可以用作MySQL存储引擎。

2)
Sphinx的特性

高速的建立索引(在当代CPU上,峰值性能可达到10 MB/);

高性能的搜索(2 4GB 的文本数据上,平均每次检索响应时间小于0.1);

可处理海量数据(目前已知可以处理超过100 GB的文本数据, 在单一CPU的系统上可
处理100 M
文档);

提供了优秀的相关度算法,基于短语相似度和统计(BM25)的复合Ranking方法;

支持分布式搜索;
provides document exceprts generation;

可作为MySQL的存储引擎提供搜索服务;

支持布尔、短语、词语相似度等多种检索模式;

文档支持多个全文检索字段(最大不超过32);

文档支持多个额外的属性信息(例如:分组信息,时间戳等);

停止词查询;

支持单一字节编码和UTF-8编码;

原生的MySQL支持(同时支持MyISAM InnoDB );

原生的PostgreSQL 支持.

3)
coreseek.com 提供的 mmseg的中文分词算法

MMSeg是一个开放源代码的中文分词软件包。中文分词就是将连续的字序列切分成词的过程

理解MMSeg算法,主要是要理解Chunk和Rule。


Chunk中包含依据上下文分出的一组词和相关的属性,包括长度(Length)、平均长度(Average Length)、标准差的平方(Variance)和自由语素度(Degree Of Morphemic Freedom)。
长度(Length):chuck中各个词的长度之和
org.solol.mmseg.internal.Chunk.getLength()

平均长度(Average Length):长度(Length)/词数
org.solol.mmseg.internal.Chunk.getAverageLength()

标准差的平方(Variance):同数学中的定义
org.solol.mmseg.internal.Chunk.getVariance()

自由语素度(Degree Of Morphemic Freedom):各单字词词频的对数之和
org.solol.mmseg.internal.Chunk.getDegreeOfMorphemicFreedom()

RuleMMSeg分词算法中的又一个关键的概念。实际上我们可以将规则理解为一个过滤器(Filter),过滤掉不符合要求的chunk。MMSeg分词算法中涉及了4个规则:
规则1:取最大匹配的chunk (Rule 1: Maximum matching)
规则2:取平均词长最大的chunk (Rule 2: Largest average word length)
规则3:取词长标准差最小的chunk (Rule 3: Smallest variance of word lengths)
规则4:取单字词自由语素度之和最大的chunk (Rule 4: Largest sum of degree of morphemic freedom of one-character words) 这4个规则在MMSeg中都有类和它对应,分别位于
org.solol.mmseg.internal.MMRule.java、
org.solol.mmseg.internal.LAWLRule.java、
org.solol.mmseg.internal.SVWLRule.java
org.solol.mmseg.internal.LSDMFOCWRule.java
MMSeg还提供了两种匹配方式,简单最大匹配(Simple maximum matching)和复杂最大匹配(Complex maximum matching)。
简单最大匹配仅仅使用了规则1。
复杂最大匹配先使用规则1来过滤chunks,如果过滤后的结果多于或等于2,则使用规则2继续过滤,否则终止过滤过程。如果使用规则2得到的过滤结果多于或等于2,则使用规则3继续过滤,否则终止过滤过程。如果使用规则3得到的过滤结果多于或等于2,则使用规则4继续过滤,否则终止过滤过程。如果使用规则4得到的过滤结果多于或等于2,则抛出一个表示歧义的异常,否则终止过滤过程。
您可以在Chih-Hao Tsai's Technology Page找到算法的原文。


参考文档资料来自http://www.coreseek.com
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-4-30 20:27 , Processed in 0.016316 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表