Coreseek + Sphinx + Mysql + PHP构建中文检索引擎

首先明确几个概念

Sphinx是开源的搜索引擎,它支持英文的全文检索。所以如果单独搭建Sphinx,你就已经可以使用全文索引了。但是往往我们要求的是中文索引,怎么做呢?国人提供了一个可供企业使用的,基于Sphinx的中文全文检索引擎。也就是说Coreseek实际上的内核还是Sphinx。那么他们的版本对应呢?

 

Coreseek发布了3.2.14版本和4.1版本,其中的3.2.14版本是2010年发布的,它是基于Sphinx0.9.9搜索引擎的。而4.1版本是2011年发布的,它是基于Sphinx2.0.2的。Sphinx从0.9.9到2.0.2还是有改变了很多的,有很多功能,比如sql_attr_string等是在0.9.9上面不能使用的。所以在安装之前请判断清楚你需要安装的是哪个版本,在google问题的时候也要弄清楚这个问题的问题和答案是针对哪个版本的。我个人强烈建议使用4.1版本。

 

网上有一篇文章说的是Sphinx和Coreseek是怎么安装的,其中它的coreseek安装这部分使用coreseek-4.1来替换就可以使用了。

 

详细步骤看上面篇文章就理解了,这里说一下我在安装过程中遇到的几个问题:

安装mmseg的时候,./configure出现错误:config.status: error: cannot find input file: src/Makefile.in

这个时候需要先运行下automake

结果我运行的时候竟然提示automake的版本不对

所以这个时候,你可能需要去官网下个对应的版本(有可能是需要老版本)再来运行

在安装csrf的时候,文档提示需要指定mysql,但是我的mysql是yum安装的,找不到安装路径


1

2

3

4

5

./configure

 

--prefix=/usr/local/coreseek --with-mysql=/usr/local/mysql

 

 --with-mmseg=/usr/local/mmseg --with-mmseg-includes=/usr/local/mmseg/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg/lib/

 

 

yum安装的mysql的include和libs文件夹一般是安装在/usr/include/mysql和/usr/lib64/mysql下面

所以这里的--with-mysql可以使用--with-mysql-includes和--with-mysql-libs来进行替换。


1

2

3

4

5

./configure

 

--prefix=/usr/local/coreseek --with-mysql-includes=/usr/includes/mysql --with-mysql-libs=/usr/lib64/mysql/

 

 --with-mmseg=/usr/local/mmseg --with-mmseg-includes=/usr/local/mmseg/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg/lib/

 

配置文件提示unknown key: sql_attr_string

如上文,就需要检查下自己的sphinx版本了

如何安装php的sphinx扩展

可以在这里(http://pecl.php.net/package/sphinx)找到sphinx的php扩展源码

注意,使用phpize,configure的时候可能会要求要安装libsphinxclient,它在coreseek-4.1-beta/csft-4.1/api/libsphinxclient/里面能找到,编译安装它以后就可以configure,make,生成动态so文件了。

如何配置sphinx.conf配置文件

最复杂的部分就是sphinx.conf配置文件的配置了,里面的注释代码非常多,我建议使用的时候把注释代码去掉,我贴出自己使用的最简单的一个成功的配置文件:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

source src1

{

        type                    = mysql

 

        sql_host                = localhost

        sql_user                = yejianfeng

        sql_pass                = test

        sql_db                  = mysite

        sql_port                = 3306  # optional, default is 3306

 

        sql_query_pre           = SET NAMES utf8

        sql_query_pre           = SET SESSION query_cache_type=OFF

 

        sql_query               = select id, id AS id_new,name, name AS name_query,descr, descr AS descr_query,city FROM account

        sql_attr_string = name

        sql_attr_string = descr

 

        sql_query_info          = SELECT * FROM account WHERE id=$id

}

 

source src1throttled : src1

{

        sql_ranged_throttle     = 100

}

 

index test1

{

        source                  = src1

        path                    = /home/yejianfeng/instance/coreseek/var/data/test1

        docinfo                 = extern

        mlock                   = 0

        morphology              = none

        min_word_len            = 1

        charset_type = zh_cn.utf-8

        charset_dictpath  = /home/yejianfeng/instance/mmseg/etc/

        html_strip              = 0

}

 

 

 

indexer

{

        mem_limit               = 256M

}

 

searchd

{

        listen                  = 9312

        listen                  = 9306:mysql41

 

        log                     = /home/yejianfeng/instance/coreseek/var/log/searchd.log

        query_log               = /home/yejianfeng/instance/coreseek/var/log/query.log

        read_timeout            = 5

        client_timeout          = 300

        max_children            = 30

        pid_file                = /home/yejianfeng/instance/coreseek/var/log/searchd.pid

        max_matches             = 1000

        seamless_rotate         = 1

        preopen_indexes         = 1

        unlink_old              = 1

        mva_updates_pool        = 1M

        max_packet_size         = 8M

        max_filters             = 256

        max_filter_values       = 4096

}

php调用SphinxClient的例子如下:

首先要确保已经启动了searchd


1

2

3

[yejianfeng@AY130416142121702aac etc]$ ps aux|grep searchd

501      30897  0.0  0.0  60824  1396 pts/2    S    17:19   0:00 /home/yejianfeng/instance/coreseek/bin/searchd -c /home/yejianfeng/instance/coreseek/etc/sphinx.conf

501      30999  0.0  0.0 103232   856 pts/2    S+   18:10   0:00 grep searchd

php提供的调用SphinxClient的接口


1

2

3

4

5

6

7

8

9

<?php

$s = new SphinxClient;

$s->setServer("localhost", 9312);

$s->setArrayResult(true);

$s->setSelect();

$s->setMatchMode(SPH_MATCH_ALL);

 

$result = $s->query('美女', 'test1');

print_r($result);

时间: 2024-10-30 11:26:44

Coreseek + Sphinx + Mysql + PHP构建中文检索引擎的相关文章

Linux下PHP+MySQL+CoreSeek中文检索引擎配置

说明: 操作系统:CentOS 5.X 服务器IP地址:192.168.21.127 Web环境:Nginx+PHP+MySQL 站点根目录:/usr/local/nginx/html 目的:安装coreseek中文检索引擎,配置MySQL数据库访问接口,使用PHP程序实现中文检索. CoreSeek官方网站: http://www.coreseek.cn/ http://www.coreseek.cn/products/=%22/products-install/step_by_step/ h

centos+php+coreseek+sphinx+mysql之一coreseek安装篇_php实例

首先附上coreseek4.1版本下载 前期准备工作: yum install make gcc g++ automake libtool MySQL-client libMySQLclient15-dev libxml2-dev libexpat1-dev autoconf automake libtool 假设我们将文件包下载在 /usr/local/src下 cd /usr/local/src tar zxvf coreseek-4.1-beta.tar.gz cd coreseek-4.

win7下PHP+MySQL+CoreSeek中文检索引擎配置

1.Windows下的coreseek安装测试 (64位win7旗舰版) 官方参考:http://www.coreseek.cn/products-install/install_on_windows/  安装条件: coreseek-3.x版本,需安装:Microsoft Visual C++ 2005 运行环境 (x86,2.6M) coreseek-4.x版本,需安装:Microsoft Visual C++ 2008 运行环境 (x86,1.7M)  下载coreseek-4.1-win

Mybatis使用MySQL模糊查询时输入中文检索不到结果怎么办_java

项目开发中,在做Mybatis动态查询时,遇到了一个问题:MySQL在进行LIKE模糊查询时,输入英文可以正常检索出结果,但是输入中文后检索得到的结果为空. 由于是使用GET方式请求,所以为了确保中文不乱码,在控制台接收到请求参数后,对中文进行了一次编码. try { realName = new String(realName.getBytes("GBK"), "UTF-8"); } catch (UnsupportedEncodingException exce

全文检索-corseek 中文检索时搜不出结果 搜英文单词正常

问题描述 corseek 中文检索时搜不出结果 搜英文单词正常 [root@abc testpack]# /usr/local/coreseek/bin/indexer -c etc/sphinx.conf --all Coreseek Fulltext 4.1 [ Sphinx 2.0.2-dev (r2922)] Copyright (c) 2007-2011, Beijing Choice Software Technologies Inc (http://www.coreseek.com

coreseek sphinx 创建表和索引的语句

前面说了,coreseek sphinx mmseg mysql等的安装,下面说一下怎么使用. 一,coreseek sphinx启动后,会多出一个端口,并且可以像mysql一样登录,但不是登录mysql  代码如下 复制代码 [root@localhost tank]# mysql -h 127.0.0.1 -P 9306      //不是真的连接mysql,而连接了sphinx index  Welcome to the MySQL monitor.  Commands end with

MySql中启用InnoDB数据引擎的方法

1.存储引擎是什么? Mysql中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力.通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能.这些不同的技术以及配套的相关功能在MySQL中被称作存储引擎(也称作表类型).MySql默认配置了许多不同的存储引擎,可以预先设置或者在MySql服务器中启用. 2.MYSQL支持的数据引擎 MyISAM:默认的MySQL插件式存储引擎,它是

ASP 调用 MySQL 5.1 中文乱码

前一段有个小程序用 MySQL 数据库,在中文乱码这块弄了办天越弄越乱,结果就放下啦.这两天有空想在研究研究,结果还弄对啦,呵呵. 以前的步骤装完 MySQL 后,进行配置时选 MySQL Server Instance Config Wizard -> detail option 当时选的编码为 gb2312, 不知道为什么到哪都出乱码. 这次换了个步骤: 1. 装 MySQL 5.1,没有进行 MySQL Server Instance Config Wizard 配置,选用 stand o

我的乱码之路——JSP与MySQL交互的中文乱码解决方案及总结

js|mysql|交互|解决|中文|中文乱码      首先实现了一个StringConvert bean(GBtoISO()和ISOtoGB()两个方法),解决了与MySQL数据库交互的时候的部分中文乱码问题:在JSP程序中读取MySQL的中文内容,用这两个方法可以解决乱码问题.     但是从JSP写入到MySQL的中文内容都成了乱码,并且再读出来的时候也显示为"??",在这里应该出现了编码转换过程中的字符信息丢失.郁闷的是,我在命令行窗口中登陆到MySQL后,执行如"I