最近在做一个搜索引擎,主要是对图书方面的对象级的搜索,首先来了解下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. eclipse 和 android studio 编译时报 Unsupported major.minor version 52.0错解决办法

    version 52.0 是java8的环境.当gradle tools 升级到2.2.1时候,可能编译时候会报该错误. 很多网友说更改java version,但是很多时候无效.下面是我遇到时候的解 ...

  2. Lotus Domino中使用Xpage技术打造通讯录

    我们来完成一个类似通讯录的功能,我们可以添加人员,查看和修改,删除人员,我们假设我们的通讯录中只记录人员的名字和年龄字段.先看看完成后的效果吧 点击New可以到新增人员页面,如下图: 编辑按钮后进入编 ...

  3. 【BootStrap】初步教程

    <span style="font-family: Arial, Helvetica, sans-serif;">最近刚刚接触到BootStrap,在这里总结一下Boo ...

  4. Scala 深入浅出实战经典 第45讲: scala中context bounds代码实例

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

  5. [LeetCode] Longest Increasing Subsequence

    Longest Increasing Subsequence Given an unsorted array of integers, find the length of longest incre ...

  6. Lumia 830 win10m 启用触摸按键

    用了一年半的830疑似翘屏… 按键基本失灵 每次按的时候基本都是 appbar 那里有反映… 实在懒于换手机(主要是不想花钱…) 研究下怎么启用虚拟按键,还能再战几年… 启用虚拟按键 其实简单说法就是 ...

  7. gulp前端自动化构建工具使用

    (1)新建项目目录gulp_web (2)项目目录下建目录src里面存放需要进行gulp处理的文件目录及文件 (3)gulpfile.js文件内容为声明需要打包应用的gulp组件及打包文件路径和打包任 ...

  8. Erwin 生成 mysql 带注释(comment )的脚本

    Erwin设计数据库非常方便,有逻辑视图和物理视图,可以很方便的生成数据库文档和SQL 脚本.在使用过程中唯一不爽的地方是脚本不能生成comment.   在百度无数次无法解决下,又FQ谷歌,在一个日 ...

  9. 《objective-c基础教程》学习笔记(九)—— Foundation框架介绍

    在之前的博文中,我们创建的项目文件的时候,默认都有引用#import <Foundation/foundation.h> 这个头文件.但是,之前我们对Foundation都没有展开介绍.这 ...

  10. web优化规范

    转载自:http://www.tuicool.com/articles/UZR3Az