Sphinx全文索引

Sphinx是一个高效的全文搜索引擎,相比Lucene,Sphinx在索引速度和搜索性能上有优势。它支持高速建索引,高并发搜索,并提供分布式检索、复合排序等功能。Sphinx适用于大规模文本数据的搜索,可以通过SQL接口进行全文检索。配置Sphinx时需要主键,且主键必须为整型。在使用过程中,索引创建包括文档处理、分词、语言处理和索引存储四个步骤,而搜索过程涉及查询分析、索引搜索和结果排序。Sphinx还可与coreseek结合,支持中文分词。此外,Sphinx可通过分布式索引提高多服务器环境的处理能力。
摘要由CSDN通过智能技术生成

Sphinx全文索引

Sphinx是一个俄国人开发的搜索引擎,
他和Lucene 的比较:

Lucene作为一个全文检索引擎,其具有如下突出的优点:
  (1)索引文件格式独立于应用平台。Lucene定义了一套以8位字节为基础的索引文件格式,使得兼容系统或者不同平台的应用能够共享建立的索引文件。
  (2)在传统全文检索引擎的倒排索引的基础上,实现了分块索引,能够针对新的文件建立小文件索引,提升索引速度。然后通过与原有索引的合并,达到优化的目的。
  (3)优秀的面向对象的系统架构,使得对于Lucene扩展的学习难度降低,方便扩充新功能。
  (4)设计了独立于语言和文件格式的文本分析接口,索引器通过接受Token流完成索引文件的创立,用户扩展新的语言和文件格式,只需要实现文本分析的接口。
  (5)已经默认实现了一套强大的查询引擎,用户无需自己编写代码即使系统可获得强大的查询能力,Lucene的查询实现中默认实现了布尔操作、模糊查询、分组查询等等。MG4J 是另一个搜索engine 。与Lucene 主要区别是,它提供了cluster 功能,具有更OO的设计方式。 MG4J可以让你为大量的文档集合构建一个被压缩的全文本索引,通过使内插编码技术。

Sphinx支持高速建立索引(可达10MB/秒,而Lucene建立索引的速度是1.8MB/秒)
高性能搜索(在2-4 GB的文本上搜索,平均0.1秒内获得结果)
高扩展性(实测最高可对100GB的文本建立索引,单一索引可包含1亿条记录)
支持分布式检索
支持基于短语和基于统计的复合结果排序机制
支持任意数量的文件字段(数值属性或全文检索属性)
支持不同的搜索模式(“完全匹配”,“短语匹配”和“任一匹配”)
支持作为Mysql的存储引擎
可以以如下SQL方式去全文检索了:
select * from xxxx where query='test;sort=attr_asc:group_id' AND ....;




全文检索两个过程
索引创建和搜索索引


如何创建索引
创建索引文档document
原文档传给分词组件tokenizer
将得到的词元token传给语言处理软件组件linguistic processor
将得到的词term传给索引组件indexer


第一步,一些创建索引的文档
id    document
1    The students are playing ball games on the playground this afternoon.

第二步,将原文档传给分词组件
tokenizer会做以下事情
1 将文档分成一个个单独的单词
2 去除标点符号
3 去除停词 stop word
英语中的停词比如the,a,this
中文停词比如,是,的,这个
对于每一种语言的分词组件,都有一个停词集和
经过分词后得到的结果为词元token
students, playing, ball, games, playground , afternoon

第三步,词元交给语言处理组件linguistic processor
处理语言时态转换等处理
对于英语,需要做
变成小写
复数变成词根
时态变化,变成基本形态
处理完变成词Term
student, play, ball, game, playground , afternoon

第四步,传给索引组件indexer
利用得到的词创建一个字典
对字典进行按字母排序
并和documentid对应

合并相同的词成为文档倒排posting list链表
Document Frequence
文档词频,总共多少文件包含这个词
Frequence
词频,此文件中包含了几个该词
如何对索引进行搜索
用户输入查询语句
提交给sphinx后,对查询语句进行词法分析,语法分析,语言处理
搜索索引,得到符合语法树的文档
根据得到的文档和查询语句的相关性,对结果进行排序


总结
1 索引过程
有一系列被索引文件
被索引文件经过语法分析和语言处理,形成一系列词Term
经过索引创建形成词典和反向索引表
通过索引存储将索引写入硬盘
2 搜索过程
用户输入查询语句
对查询语句经过语法分析和语言分析得到一系列词Term
通过语法分析得到一个查询树
通过索引存储将索引读入到内存
利用查询树搜索索引,得到每个词的文档链表,对文档链表进行交,差,并运算得到结果文档
将搜索到的结果文档对查询的相关性进行排序
返回查询结果给用户


sphinx基于sql的全文检索引擎
coreseek 支持中文的全文检索引擎

缺点
必须要有主键
主键必须为整形
不负责数据存储
配置不灵活

相当于数据库的中间层,是一个单独的服务器
分担数据库压力,在大数据并发的时候,会有极大提高


实验手册
Sphinx+linux+apache+mysql+php+coreseek

Centos 5.5
Mysql-5.1
apache-2.2.9
php-5.2.6
    php还需要模块sphinx-1.1.0.tgz
sphinx-0.9.9.tar.gz
coreseek-3.2.14.tar.gz


sphinx
1 下载源码0.9.9-release
wget http://shpinxsearch.com/downloads/sphinx-0.9.9.tar.gz

2 编译和安装
tar -zxvf  sphinx-0.9.9.tar.gz
cd /lamp/sphinx-0.9.9
编译时需要引用mysql
./configure --prefix=/usr/local/sphinx --with-mysql=/usr/local/mysql
make && make install

然后会生成sphinx中三个重要命令,在/usr/local/sphinx/bin下
indexer 创建索引
searchd 是一个服务,进程
search 命令行搜索
/usr/local/sphinx/var下
存放sphinx生成的索引表
/usr/local/sphinx/etc下
配置文件



3 准备mysql
mysql是数据源
mysql -uroot -p123 test
帖子表
create table post(
id int unsigned auto_increment primary key,
title varchar(254),
content text);

一行数据就是一个文本
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值