什么是全文检索:

全文检索是指以文档的全部文本信息作为检索对象的一种信息检索技术。检索的对象有可能是文章的标题,也有可能是文章的作者,也有可能是文章摘要或内容。

简介:

Sphinx是由俄罗斯人Andrew Aksyonoff开发的一个全文检索引擎。意图为其他应用提供高速、低空间占用、高结果 相关度的全文搜索功能。Sphinx可以非常容易的与SQL数据库和脚本语言集成。

当前系统内置MySQL和PostgreSQL 数据库数据源的支持,也支持从标准输入读取特定格式 的XML数据。通过修改源代码,用户可以自行增加新的数据源(例如:其他类型的DBMS 的原生支持);

它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。Sphinx特别为一些脚本语言设计搜索API接口,如PHP,Python,Perl,Ruby等,同时为MySQL也设计了一个存储引擎插件(SphinxEx)。

Sphinx单一索引最大可包含1亿条记录,在1千万条记录情况下的查询速度为0.x秒(毫秒级)。Sphinx创建索引的速度为:创建100万条记录的索引只需 3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。

特性:

Sphinx的主要特性包括:

高速索引 (在新款CPU上,近10 MB/秒);

高速搜索 (2-4G的文本量中平均查询速度不到0.1秒);

高可用性 (单CPU上最大可支持100 GB的文本,100M文档);

提供良好的相关性排名

支持分布式搜索;

提供文档摘要生成;

提供从MySQL内部的插件式存储引擎上搜索

支持布尔,短语, 和近义词查询;

支持每个文档多个全文检索域(默认最大32个);

支持每个文档多属性;

支持断词;

支持单字节编码与UTF-8编码。

全文检索基本原理实现过程:

索引创建(Indexing)和搜索索引(Search)

索引创建:将现实世界中所有的结构化和非结构化数据提取信息,创建索引的过程;

搜索索引:就是得到用户的查询请求,搜索创建的索引,然后返回结果的过程;

如何创建索引?(Indexing)

1.一些需要创建索引的文档(Documents);

2.将原文档传给分词组件(Tokenizer);

3.将得到的词元(Token)传给语言处理组件(Linguistic Processor);

4.将得到的词(Term)传给索引组件(Indexer);

第一步:一些创建索引的文档;

文档1: Students should be allowed to go out with their friends,but not allowed to drink beer;

文档2: My friend Jerry went to school to see his students but found them drunk which is not allowed;

第二步:将原文档传给分词组件(Tokenizer)

分词组件(Tokenizer)会做以下几件事情(此过程称为Tokenize);

1.将文档分成一个单独的单词;

2.去除标点符号;

3.去除停词(stop word);

所谓停词(stop word)就是一种语言中最普通的一些单词:

英语中的停词(stop word)如:“the”,“a”,“this”等;

中文中的停词如:“是”,“的”,“这个”等;

对于每一种语言的分词组件(Tokenizer),都有一个停词(stop word)集合;

经过分词(Tokenizer)后得到的结果称为词元(Token);

在我们的例子中,便得到以下词元(Token);

Students,allowed,go,their,friends,allowed,drink,beer,My,friend,Jerry,went,school,see,his,students,found,them,drunk,allowed

第三步:将得到的词元(Token),传给语言处理组件(Linguistic
Processor);

语言处理组件主要是对得到的词元做一些同语言相关的处理,对于英语,语言处理组件一般做以下几点:

1.将单词变为小写(Lowercase);

2.将单词缩减为词根形式,如“cars”到“car”等;这种操作称为:stemming

3.将单词转变为词根形式,如“drove”到“drive”等,这种操作称为:lemmatization

语言处理组件的结果称为词(Term);

在我们的例子中,经过语言处理,得到的词(Term)如下:

Student,allow,go,their,friend,allow,drink,beer,my,friend,jerry,go,school,see,his,student,find,them,drink,allow

也正是因为语言处理的步骤,才能使搜索drove,则drive也能被搜索出来;

第四步:将得到的词(Term)传给索引组件(Indexer);

索引组件(Indexer)主要做以下几件事情;

1.利用得到的词(Term)创建一个字典;

2.对字典按字母顺序进行排序(文档与对应的ID);

3.合并相同的词(Term)成为文档倒排(Posting
List)链表

如何对索引进行搜索?(Search)

1.用户输入查询语句;

2.对查询语句进行词法分析,语法分析,及语言处理;

3.搜索索引,得到符合语法树的文档;

4.根据得到的文档和查询语句的相关性,对结果进行排序;

总结:

1.索引过程

1).有一系列被索引文件

2).被索引文件经过语法分析和语言处理形成一系列词(Term);

3).经过索引创建形成词典和反向索引表;

4).经过索引存储将索引写入硬盘;

2.搜索过程:

1).用户输入查询语句;

2).对查询语句经过语法分析和语言分析得到一系列词(Term);

3).通过语法分析得到一个查询树;

4).通过索引存储将索引读入到内存;

5).利用查询树搜索索引,从而得到每个词(Term)的文档链表,对文档链表进行交,差,并得到结果文档;

6).将搜索到的结果文档对查询的相关性进行排序;

7).返回查询结果给用户;

如我们在百度里进行搜索PHP环境搭建,它能把包含PHP、环境、搭建,环境搭建的文档都能搜索出来,在这个过程中首先它会把要搜索的词交给sphinx处理,然后sphinx通过分词处理组件把PHP、环境、搭建,环境搭建这几个词拆出来得到词元,通过语言处理组件把得到的词元进行时态转换得到词(PHP、环境、搭建,环境搭建),接着把得到的词交给sphinx索引表进行搜索,这时就会把这些词对应的文档索引就给找出来了;

(基本原理实现来源兄弟连资料)

更多参考资料:

http://sphinxsearch.com/wiki/doku.php?id=sphinx_manual_chinese

http://sphinxsearch.com/wiki/doku.php?id=sphinx_chinese_tutorial

http://www.sphinxsearch.org

https://code.google.com/p/sphinx-for-chinese

http://www.coreseek.cn

Sphinx 全文检索的更多相关文章

  1. Coreseek/sphinx全文检索的了解

    Coreseek/sphinx全文检索的了解 概述: 全文检索是一种将文件里全部文本与检索项匹配的文字资料检索方法,全文检索是将存储于数据库中整本书.整篇文章中的随意内容信息查找出来的检索.它能够依据 ...

  2. Sphinx全文检索

    全文检索 一.生活中的数据总体分为: 结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等. 非结构化数据:指没有固定格式或不定长的数据,如邮件,word文档等. 非结构化数据还有一种叫法: ...

  3. Sphinx全文检索引擎测试

    数据表 1.documents CREATE TABLE `documents` ( `id` int(13) NOT NULL auto_increment, `group_id` int(11) ...

  4. sphinx全文检索 安装配置和使用

    公司项目刚刚导入大量产品数据,然后发现网站的产品搜索很卡,原本是原生sql的like来做模糊搜索,数据量20W的时候还可以接受,但是上百万就很卡了,所以需要做优化. 经过考虑,打算采用全文检索 sph ...

  5. sphinx全文检索功能 | windows下测试 (一)

    前一阵子尝试使用了一下Sphinx,一个能够被各种语言(PHP/Python/Ruby/etc)方便调用的全文检索系统.网上的资料大多是在linux环境下的安装使用,当然,作为生产环境很有必要部署在* ...

  6. sphinx全文检索之PHP使用(转)

    基础 数据结构: CREATE TABLE email ( emailid mediumint(8) unsigned NOT NULL auto_increment COMMENT '邮件id', ...

  7. sphinx全文检索引擎

    今天刚刚学习了一下,就直接分享上去,有些还没有接触,如果有问题请指正,谢谢 sphinx是什么? Sphinx是一个全文检索引擎.主要为其他应用提供高速.低空间占用.高结果 相关度的全文搜索功能. S ...

  8. centos7下搭建sphinx全文检索引擎

    Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用 程序更容易实现专业化的全文检索.Sphinx特别为一些 ...

  9. discuz sphinx全文检索搜索引擎方案

    基于discuz的索引配置文件,这个配置文件比较灵活,可以根据不同的需求来配置 # # linuxTone full index search configure file # source lt_p ...

随机推荐

  1. CentOS6 下Vim安装和配置

    1.系统只安装了vim-minimal,执行以下命令安装另外两个组件 yum install vim-common yum install vim-enhanced 2.安装ctags yum ins ...

  2. 用Java实现菱形的打印输出

    import java.util.Scanner; public class dengyao2 { public dengyao2() { super(); } public static void ...

  3. document.compatMode(判断当前浏览器采用的渲染方式)

    转载自:http://www.cnblogs.com/fullhouse/archive/2012/01/17/2324706.html IE对盒模型的渲染在 Standards Mode和Quirk ...

  4. 关于新建JSP文件后,文件开头报错的处理

    新建了一个web工程,之后建立了jsp页面,刚建立完成,文件开头就报错:The superclass "javax.servlet.http.HttpServlet" was no ...

  5. js正则表达式之解析——URL的正则表达式

    首先,此片文章并不是直接告诉你,url的正则表达式是什么,以及怎么使用这个正则表达式去解析一个URL地址,相信这种问题在网络上已经能找到很多.本文的宗旨在于教你如何理解URL的正则表达式,以达到理解正 ...

  6. 【转】【Android测试技巧】01. root后adb shell默认不是root用户时,如何将文件放入手机系统中

    http://blog.csdn.net/wirelessqa/article/details/8624208 有些机器root后通过adb shell 后,默认不是root用户,需要输入 su才能切 ...

  7. Swift学习笔记十五

    自动引用计数(Automatic Reference Counting) 和OC一样,Swift用自动引用计数机制来跟踪和管理你应用程序的内存,大多数情况下,你不需要考虑自己管理内存,Swift会自动 ...

  8. go exec: "gcc": executable file not found in %PATH%

    win下使用go,在进行go run build.go时,提示 exec: "gcc": executable file not found in %PATH% 原因是sqlitl ...

  9. Codeforces Round #253 (Div. 1) A. Borya and Hanabi 暴力

    A. Borya and Hanabi Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/442/p ...

  10. ntoskrnl.exe损坏或丢失的解决方式

    同事的电脑启动时出现下面提示:"因下面文件损坏或丢失Windows无法启动 %systemroot%\system32\ntoskrnl.exe,请又一次安装以上文件的拷贝"(Wi ...