一.不停止mysql的情况下安装SphinxSE

1.确定mysql版本,下载对应源码包

此处下载5.1.69的mysql源码包

#wget ftp://ftp.ntu.edu.tw/pub/MySQL/Downloads/MySQL-5.1/mysql-5.1.69.tar.gz

解压

2.下载sphinx:

#wget http://sphinxsearch.com/downloads/sphinx-0.9.9.tar.gz

解压

3.拷贝mysqlse到mysql5.1.69下的storage/sphinx

#cp -r sphinx-0.9.9/mysqlse/ mysql-5.1.69/storage/sphinx

4.编译

#cd mysql-5.1.69

#sh BUILD/autorun.sh

#./configure

#make

5.mysql插入sphinx引擎

#cd ./mysql-5.1.69

#cd ./storage/sphinx/.libs

#cp ha_sphinx.* /usr/lib64/mysql/plugin

更改所有者

#chown mysql.mysql /usr/lib64/mysql/plugin/*

登录mysql,插入引擎

#mysql -u root -p -h localhost

#mysql> INSTALL PLUGIN sphinx SONAME 'ha_sphinx.so';

检查引擎是否安装

#mysql> show engines;

如果出现sphinx引擎,则表明已正常安装

二.安装Coreseek,使其支持中文索引及检索

1.安装autoconf

2.下载coreseek3.2.14.tar.gz,并解压缩

3.安装mmseg分词

#cd coreseek-3.2.14

#./bootstrap

#./configure --prefix=/usr/local/mmseg3

#make

#make install

4.安装csft

#cd ../csft-3.2.14/

#sh buildconf.sh

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

===========================================================

##如果出现错误提示:“ERROR: cannot find MySQL include files.......To disable MySQL support, use --without-mysql option.“,可按照如下方法处理:

##请找到头文件mysql.h所在的目录,一般是/usr/local/mysql/include,请替换为实际的

##请找到库文件libmysqlclient.a所在的目录,一般是/usr/local/mysql/lib,请替换为实际的

##configure参数加上:--with-mysql-includes=/usr/local/mysql/include --with-mysql-libs=/usr/local/mysql/lib,执行后,重新编译安装

============================================================

#make

#make install

三.配置并测试

1.进入coreseek目录

#cd /usr/local/coreseek/etc

#ls

可以看到三个文件

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

#cp sphinx.conf.dist sphinx.conf

2.配置sphinx.conf

source src1

{

type                   = mysql

sql_host               = localhost

sql_user               = root

sql_pass               = 123456

sql_db                 = test

sql_port               = 3306   # optional, default is 3306

sql_sock                              = /var/lib/mysql/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

}

3.创建test数据库,并建立表documents,sql语句如下

DROP TABLE IF EXISTS test.documents;

CREATE TABLE test.documents

(

id                      INTEGER PRIMARY KEY NOT NULL AUTO_INCREMENT,

group_id        INTEGER NOT NULL,

group_id2       INTEGER NOT NULL,

date_added      DATETIME NOT NULL,

title           VARCHAR(255) NOT NULL,

content         TEXT NOT NULL

);

REPLACE INTO test.documents ( id, group_id, group_id2, date_added, title, content ) VALUES

( 1, 1, 5, NOW(), 'test one', 'this is my test document number one. also checking search within phrases.' ),

( 2, 1, 6, NOW(), 'test two', 'this is my test document number two' ),

( 3, 2, 7, NOW(), 'another doc', 'this is another group' ),

( 4, 2, 8, NOW(), 'doc number four', 'this is to test groups' );

DROP TABLE IF EXISTS test.tags;

CREATE TABLE test.tags

(

docid INTEGER NOT NULL,

tagid INTEGER NOT NULL,

UNIQUE(docid,tagid)

);

INSERT INTO test.tags VALUES

(1,1), (1,3), (1,5), (1,7),

(2,6), (2,4), (2,2),

(3,15),

(4,7), (4,40);

4.生成索引

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

其中参数--all表示生成所有索引

当然也可以是索引的名字例如:#/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/sphinx.conf test1

执行后可以在/usr/local/coreseek/var/data目录中看到多出一些文件,是以索引名为文件名的不同的扩展名的文件

在不启动sphinx的情况下即可测试命令:

#/usr/local/coreseek/bin/search -c /usr/local/coreseek/etc/sphinx.conf number

#/usr/local/coreseek/bin/search -c /usr/local/coreseek/etc/sphinx.conf number --filter group_id 2

限定group_id 为2 返回一条记录

我们插入几条数据来测试中文

set names utf8  之前一定要设置字符集

INSERT INTO `test`.`documents` (

`id` ,

`group_id` ,

`group_id2` ,

`date_added` ,

`title` ,

`content`

)

VALUES (

NULL , '2', '3', '2011-02-01 00:37:12', '研究生的故事', '研究生自主创业'

), (

NULL , '1', '1', '2011-01-28 00:38:22', '研究', '为了创业而研究生命科学'

);

插入数据后需要重新索引

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

进行测试

#/usr/local/coreseek/bin/search -c /usr/local/coreseek/etc/sphinx.conf 研究生创业

四.实际使用

1.作为守护进程启动

#/usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/sphinx.conf

2.建立一个sphinx引擎的表

CREATE TABLE t1

(

id          INTEGER UNSIGNED NOT NULL,

weight      INTEGER NOT NULL,

query       VARCHAR(3072) NOT NULL,

group_id    INTEGER,

INDEX(query)

) ENGINE=SPHINX CONNECTION="sphinx://localhost:9312/test1";

搜索表前三列的类型必须是INTEGER,INTEGER和VARCHAR,这三列分别对应文档ID,匹配权值和搜索查询。查询列必须被索引,其他列必须无索引。列的名字会被忽略,所以可以任意命名,参数CONNECTION来指定用这个表搜索时的默认搜索主机、端口号和索引,语法格式:CONNECTION="sphinx://HOST:PORT/INDEXNAME"。

执行SQL语句 select d.id,d.title,d.content from t1 join documents as d on t1.id = d.id and t1.query = '研究生创业';

即可查询结果

3.在不停止searchd的情况下主索引

插入数据后创建主索引

#/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/sphinx.conf test1 --rotate

对于实际应用,应该是主索引+增量索引

Sphinx+MySQL5.1x+SphinxSE+mmseg的更多相关文章

  1. Sphinx+MySQL5.1x+SphinxSE+mmseg中文分词

    什么是Sphinx Sphinx 是一个全文检索引擎,一般而言,Sphinx是一个独立的搜索引擎,意图为其它应用提供快速.低空间占用.高结果相关度的全文搜索功能.Sphinx能够很easy的与SQL数 ...

  2. ubuntu下 mysql5.6.4 +sphinx安装

    安装mysql 5.6.4 下载源码 安装cmake sudo apt-get install cmake 进入mysql源码包: 创建mysql用户与用户组 groupadd mysql usera ...

  3. 安装sphinx

    安装Sphinx全文检索服务器 Sphinx默认不支持中文索引及检索, 以前用Coreseek的补丁来解决,目前Coreseek 不单独提供补丁文件,而基于sphinx开发了Coreseek 全文检索 ...

  4. 【整理】Linux下中文检索引擎coreseek4安装,以及PHP使用sphinx的三种方式(sphinxapi,sphinx的php扩展,SphinxSe作为mysql存储引擎)

          一,软件准备 coreseek4.1 (包含coreseek测试版和mmseg最新版本,以及测试数据包[内置中文分词与搜索.单字切分.mysql数据源.python数据源.RT实时索引等测 ...

  5. 解压版MySQL5.7.1x的安装与配置

    解压版MySQL5.7.1x的安装与配置 MySQL安装文件分为两种,一种是msi格式的,一种是zip格式的.如果是msi格式的可以直接点击安装,按照它给出的安装提示进行安装(相信大家的英文可以看懂英 ...

  6. linux环境下安装sphinx中文支持分词搜索(coreseek+mmseg)

     linux环境下安装sphinx中文支持分词搜索(coreseek+mmseg) 2013-11-10 16:51:14 分类: 系统运维 为什么要写这篇文章? 答:通过常规的三大步(./confi ...

  7. MySQL+Sphinx实现全文搜索

    最近在做一个搜索引擎,主要是对图书方面的对象级的搜索,首先来了解下Sphinx吧. 它能够提高你的查询的速度,这个不是一般的快. Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,Pos ...

  8. Sphinx学习之sphinx的安装篇

    一.  Sphinx简介 Sphinx是由俄罗斯人Andrew Aksyonoff开发的一个全文检索引擎.意图为其他应用提供高速.低空间占用.高结果 相关度的全文搜索功能.Sphinx可以非常容易的与 ...

  9. sphinx

    1.什么是SphinxSphinx 是一个在GPLv2 下发布的一个全文检索引擎,商业授权(例如, 嵌入到其他程序中)需要联系我们(Sphinxsearch.com)以获得商业授权.一般而言,Sphi ...

随机推荐

  1. oracle 10g 学习之视图、序列、索引、同义词(9)

    目标 通过本章学习,您将可以: l  描述视图 l  创建和修改视图的定义,删除视图 l  从视图中查询数据 l  通过视图插入, 修改和删除数据 l  使用“Top-N” 分析 l  创建, 维护, ...

  2. hdu 3466 排序01背包

    也是好题,带限制的01背包,先排序,再背包 这题因为涉及到q,所以不能直接就01背包了.因为如果一个物品是5 9,一个物品是5 6,对第一个进行背包的时候只有dp[9],dp[10],…,dp[m], ...

  3. 关于MFC监听器的相关了解

    最近有个项目,所搭框架为了减少耦合,希望MainFrame中View不依赖于Mainframe,即MainFrame中含有view类而view中不会包含MainFrame的相关信息. 现在遇到一个问题 ...

  4. Activity使用Serializable传递对象实例

    public class SerializableBook implements Serializable { private static final long serialVersionUID = ...

  5. uva494 Kindergarten Counting Game

    #include<bits/stdc++.h>using namespace std;int main(){ int n=0; char a; int flag=1; while((sca ...

  6. 理解Null,Undefined,NAN

    1.null表示尚未存在的对象,转为数值时为0.它表示"没有对象",即该处不应该有值,常用来表示函数企图返回一个不存在的对象.null是一种特殊的object(引用类型),代表一个 ...

  7. Windows内核下操作字符串!

    * Windows内核下操作字符串! */ #include <ntddk.h> #include <ntstrsafe.h> #define BUFFER_SIZE 1024 ...

  8. 模拟 CSU 1562 Fun House

    题目传送门 /* 题意:光线从 '*' 发射,遇到 '/' 或 '\' 进行反射,最后射到墙上,将 'x' 变成 '&' 模拟:仔细读题,搞清楚要做什么,就是i,j的移动,直到撞到墙,模拟一下 ...

  9. Ubuntu 14.04 MySQL同步

    主服务器:192.168.2.212 从服务器:192.168.2.211   主服务器(192.168.2.212): 先到/etc/mysql/my.cnf下 将 bind-address 127 ...

  10. BZOJ1172 : [Balkan2007]Dream

    $\gcd(ab,k)=\gcd(\gcd(a,k)\times \gcd(b,k),k)$ 设$f[i][j]$表示前$i$行,与$k$的$\gcd$为$j$的方案数,$h[i]$表示当前行选一个或 ...