最近在做一个搜索引擎,主要是对图书方面的对象级的搜索,首先来了解下Sphinx吧。

它能够提高你的查询的速度,这个不是一般的快。

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

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

Sphinx的主要特性包括:

高速索引 (在新款CPU上,近10 MB/秒);
高速搜索 (2-4G的文本量中平均查询速度不到0.1秒);
高可用性 (单CPU上最大可支持100 GB的文本,100M文档);
提供良好的相关性排名

支持分布式搜索;

提供文档摘要生成;

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

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

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

支持每个文档多属性;
支持断词;

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

看了上面的特点还是挺不错的,在看看使用的方式吧.

原生MySQl存储引擎检索流程:

基于Sphinx存储引擎检索:

我还是比较喜欢使用第二种存储引擎,即使你的编程语言不支持Sphinx的API的接口也可以使用哟。

在开始安装之前需要安装一些必要的组件

yum -y install gcc g++ gcc-c++ libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers patch libtool automake imake mysql-devel expat-devel

(1)安装python支持

yum install –y python python-devel

(2)编译安装LibMMSeg(LibMMSeg是为Sphinx全文搜索引擎设计的中文分词软件包,其在GPL协议下发行的中文分词法,采用Chin-Hao Tsai的MMSEG算法。LibMMSeg在本文中用来生成中文分词词库)。

wget http://www.coreseek.com/uploads/sources/mmseg-0.7.3.tar.gz

tar zxvf mmseg-0.7.3.tar.gz

cd mmseg-0.7.3

./configure

make

make install

(1)       编译安装MySQL5.1.26-rc、Sphinx、SphinxSE存储引擎

wget http://blog.s135.com/soft/linux/nginx_php/mysql/mysql-5.1.26-rc.tar.gz

tar zxvf mysql-5.1.26-rc.tar.gz

wget http://www.sphinxsearch.com/downloads/sphinx-0.9.8-rc2.tar.gz

wget http://www.coreseek.com/uploads/sources/sphinx-0.98rc2.zhcn-support.patch

wget http://www.coreseek.com/uploads/sources/fix-crash-in-excerpts.patch

tar zxvf sphinx-0.9.8.rc2.tar.gz

patch –p1 < ../sphinx-0.98rc2.zhcn-support.patch    #补丁

patch –p1 <../fix-crash-in-excerpts.patch     #补丁

cp –rf mysqlse ../mysql-5.1.26-rc/storage/sphinx

cd ../

cd mysql-5.1.26-rc/

sh BUILD/autorun.sh

./configure --with-plugins= partition,innobase,myisammrg,sphinx  --prefix=/usr/local/mysql / --enable-assembler --with-extra-charsets=complex --enable-thread-safe-client --with-big-tables --with-readline --with-ssl --with-embedded-server --enable-local-infile

make && make install

cd ../

启动MySQL数据库

cp support-files/my-medium.cnf /etc/my.cnf # 配置文件

cp support-files/mysql.server /etc/rc.d/mysqld # 添加 MySQL 服务控制

cd /usr/local/mysql

bin/mysql_install_db --user=mysql # 安装

bin/mysqld_safe --user=mysql & # 测试安装是否成功

bin/mysql # 进入 MySQL 命令提示符

启动停止

/etc/rc.d/mysqld start

/etc/rc.d/mysqld stop

于是我们自己创建文件/etc/rc.local并给予执行权限。大致内容为:

#!/bin/sh

/usr/local/mysql/bin/mysqld_safe --user=mysql &

或者

/etc/rc.d/mysqld start

输入下列命令出现SPHINX表示SphinxSE已经移植到MySQL中去了。

show engines;

本文使用的0.9.8版本,建议使用0.9.9版本,0.9.9版本是最稳当的版本,我最后也改成了0.9.9版本的。

Sphinx默认不支持中文索引及检索,以前用Coreseek的补丁来解决,目前Coreseek不单独提供补丁,而基于Sphinx开发了Coreseek全文检索服务器,Coreseek应该是现在用的最多的Sphinx中文全文检索,它提供了为Sphinx设计的中文分词包LibMMSeg包含mmseg中文分词,其实coreseek-3.2.14.tar.gz中已经包含了sphinx,前面安装SphinxSE时也可以使用这个压缩包里的mysqlse。

安装autoconf

tar zxvf autoconf-2.64.tar.gz

cd autoconf-2.64

./configure –prefix=/usr

make

make install

安装Coreseek

tar zxvf coreseek-3.2.14.tar.gz

cd coreseek-3.2.14

cd mmseg-3.2.14/

./bootstrap

./configure –prefix=/usr/local/mmseg3

make

make install

cd ../csft-3.2.14/

sh buildconf.sh

./configure --prefix=/usr/local/coreseek --without-python --without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/mmseg3/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg3/lib/ --with-mysql --host=arm

make

make install

cd /usr/local/coreseek/etc

进入配置目录通过命令ls可以看到3个文件

example.sql  sphinx.conf.dist  sphinx-min.conf.dist

其中example.sql是实例sql脚本我们将其导入到数据库中的test数据库中作为测试数据(会创建documents表和tags表)

vi sphinx.conf

输入一些内容:

source src1

{

type                   = mysql

sql_host               = localhost

sql_user               = root

sql_pass               =12345678

sql_db                 = test

sql_port               = 3306   # optional, default is 3306

sql_sock                              = /tmp/mysql.sock

sql_query_pre = SET NAMES utf8

sql_query              = \

SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content \

FROM documents

sql_attr_uint          = group_id

sql_attr_timestamp     = date_added

sql_query_info              = SELECT * FROM documents WHERE id=$id

}

index test1

{

source                      = src1

path                   = /usr/local/coreseek/var/data/test1

docinfo                     = extern

charset_type           = zh_cn.utf-8

mlock              = 0

morphology         = none

min_word_len       = 1

html_strip         = 0

charset_dictpath       = /usr/local/mmseg3/etc/

ngram_len                    = 0

}

indexer

{

mem_limit              = 32M

}

searchd

{

port                   = 9312

log                         = /usr/local/coreseek/var/log/searchd.log

query_log              = /usr/local/coreseek/var/log/query.log

read_timeout           = 5

max_children           = 30

pid_file               = /usr/local/coreseek/var/log/searchd.pid

max_matches                 = 1000

seamless_rotate             = 1

preopen_indexes             = 0

unlink_old                  = 1

}

说明:代码段sorce src1{***}代表数据源里面主要包含了数据库的配置信息,src1表示数据源名字,可以随便写。

代码段index test1{***} 代表为那个数据源创建索引,与source ***是成对出现的,其中的source参数的值必须是某个数据源的名字。

生成索引

/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/sphinx.conf --all

出现的问题:

问题1:如果sh  BUILD/autorun.sh

但sphinx就是不会出现在configure –h里面,需要执行sh BUILD/cleanup 再执行sh BUILD/autorun.sh 然后执行./configure –h现在就可以看到sphinx了。

问题2:如果编译mysql是报错查看是否安装ncurses安装包

可以执行:yum list|grep ncurses

yum –y install ncurses-devel

yum install ncurses-devel

然后再执行./configure。

问题3 在安装LibMMSeg需要先执行yum install mysql-devel libxml2-devel expat-devel

问题4 在安装MMSeg的时候出现错误提示为:css/UnigramCorpusReader.cpp:89: error: 'strncmp' was not declared in this scope

手动修改了src/css/UnigramCorpusReader.cpp

在上面添加了一句

#include <string.h>

然后再开始编译安装就可以了。

MySQL+Sphinx实现全文搜索的更多相关文章

  1. mac 下 sphinx + mysql + php 实现全文搜索(xampp)(3)sphinx 的配置项解析

    source:数据的来源,数据是从什么地方来的. index:索引,当有数据源之后,从数据源处构建索引.索引实际上就是相当于一个字典检索.有了整本字典内容以后,才会有字典检索. searchd:提供搜 ...

  2. mac 下 sphinx + mysql + php 实现全文搜索(xampp)(1)

      原理: 使用sphinx 中的indexer 生成索引数据 service/web 端 利用searched 调用索引数据 步骤: 下载 sphinx: 下载地址:http://sphinxsea ...

  3. mac 下 sphinx + mysql + php 实现全文搜索(xampp)(4)php api 解析

    1:function GetLastError()  // 假如报错的话,会输出报错信息 2:function GetLastWarning ()// 输出 警告信息 3:function SetSe ...

  4. [转]Sphinx+Mysql+中文分词安装-实现中文全文搜索

    From : http://blog.csdn.net/lgm252008/article/details/5373436 1.什么是SphinxSphinx 是一个在GPLv2 下发布的一个全文检索 ...

  5. mysql 全文搜索(转载http://blog.csdn.net/manbujingxin/article/details/6656992)

    前提:mysql只支持英文内容的全文索引,所以只考虑英文的全文搜索.假定数据表名为post,有三列:id.title.content.id是自增长序号,title是varchar,content是te ...

  6. php+中文分词scws+sphinx+mysql打造千万级数据全文搜索

    转载自:http://blog.csdn.net/nuli888/article/details/51892776 Sphinx是由俄罗斯人Andrew Aksyonoff开发的一个全文检索引擎.意图 ...

  7. MySQL 全文搜索支持, mysql 5.6.4支持Innodb的全文检索和类memcache的nosql支持

    背景:搞个个人博客的全文搜索得用like啥的,现在mysql版本号已经大于5.6.4了也就支持了innodb的全文搜索了,刚查了下目前版本号都到MySQL Community Server 5.6.1 ...

  8. MySQL 全文搜索支持

    MySQL 全文搜索支持 从MySQL 4.0以上 myisam引擎就支持了full text search 全文搜索,在一般的小网站或者blog上可以使用这个特性支持搜索. 那么怎么使用了,简单看看 ...

  9. ubuntu上 安装 基于sphinx 的 coreseek 全文搜索

    原生sphinx不支持中文, sphinx-for-chinese匹配中文时也不返回结果 ,真纠结,  最好试了 coreseek,这个能正确返回结果了, 所以记录一下 1 http://www.co ...

随机推荐

  1. CoreOS实践(2)—在coreos上安装Kubernetes

    下载kubernetes sudo mkdir -p /opt/bin sudo wget https://storage.googleapis.com/kubernetes/binaries.tar ...

  2. 用C++为nodejs 写组件,提高node处理效率

    昨天研究了下如何用C++和node交互,在node的程序中,如果有大数据量的计算,处理起来比较慢,可以用C++来处理,然后通过回调(callback的形式),返回给node. 首先,先来看看node ...

  3. [转]Android 超高仿微信图片选择器 图片该这么加载

    快速加载本地图片缩略图的方法: 原文地址:Android 超高仿微信图片选择器 图片该这么加载 其示例代码下载: 仿微信图片选择器 ImageLoader

  4. ECSHOP后台SQL查询提示错误 this sql May contain UPDATE,DELETE,TRUNCATE,ALTER,DROP,FLUSH,INSERT

    一).首先说一下错误现象:市面上流行的绝大部分ECSHOP模板,安装的时候都需要执行一段或几段SQL语句来修改数据结构或者初始化一些数据.大多数ECSHOP管理员为了省事,都会通过 “ECSHOP后台 ...

  5. WinForm数据源分页技术

    1.编写分页存储过程 USE [Contacts]GO create procedure [dbo].[GetPageData] (@startIndex int,@endIndex int)asbe ...

  6. Target runtime com.genuitec.runtime.generic.jee50 is not defined

    导入别人的工程,发现报错Target runtime com.genuitec.runtime.generic.jee50 is not defined   解决方法:1. 找到工程目录的.setti ...

  7. java.util.Properties类

    http://trans.blog.51cto.com/503170/110227/ http://soft.chinabyte.com/database/395/12625895.shtml

  8. JVM 参数翻译汉化解释

    博客搬家,新地址:http://www.zicheng.net/article/38.htm Behavioral Options(行为参数) Option and Default Value Des ...

  9. [PaPaPa][需求说明书][V0.1]

    PaPaPa软件需求说明书V0.1 前   言 我觉得我们废话不能多,废话一多的话大家就找不到重点了,其实本项目是出于技术研究的目的来开发的,大家讨论了半天决定要做社(yue)交(pao)类的项目. ...

  10. 墓地雕塑-LA3708

    https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=20& ...