讲解Sphinx/Coreseek在windows下的配置安装及测试

来源:互联网 发布:springer数据库 编辑:程序博客网 时间:2024/04/30 22:43

在windows下Sphinx\Coreseek的配置安装与测试

一、安装:     1.  安装Python 2.6 Windows (x86)(必须,32位系统和64位系统均安装该版本):从ActiveState官方网站下载ActivePython 2.6 Windows (x86),然后安装;您也可从华军软件园下载ActivePython 2.6 Windows (x86),然后安装;      2. 安装 Microsoft Visual C++ 2005 Redistributable Package (x86)(必须,32位系统和64位系统均安装该版本):从微软官方网站下载Microsoft Visual C++ 2005 Redistributable Package (x86),然后安装;      3. 安装 Coreseek-3.2.13(必须):【2010年11月14日更新,支持命令行中文搜索测试】从Coreseek官方网站下载 http://www.coreseek.cn/uploads/csft/3.2/coreseek-3.2.13-win32.zip解压coreseek-3.2.13-win32.zip到coreseek-3.2.13-win32目录,重命名为sphinx,任意存放。 

二、coreseek中文全文检索测试     直接运行coreseek-3.2.13-win32目录下的test.cmd文件,如果没出任何问题,则一切测试正常,相关手工命令测试请访问:http://www.coreseek.cn/products-install/install_on_windows/

三、部分命令的说明使用这一切命令的输入都在“cmd命令提示符”窗口里操作,假如:把sphinx目录放在D盘下,以下的所有例子将以这路径操作,不再说明。



1)、创建全部索引:

(注:这里的索引不是数据库里的索引,是不同的概念,这只对于coreseek而言,别混淆)

bin\indexer –c etc\csft_mysql.conf --all

备注:其中etc\csft_mysql.conf就是刚才的配置文件相对路径;如果修改了数据库中的数据,则要重建索引,类似于刷新,因为创建索引后会自动把数据库中的数据存储到内存中,所以必须重建索引。



2)、创建个别索引:

bin\indexer –c etc\csft_mysql.conf 索引名称1  索引名称2 …



3)、启动搜索服务:

bin\searchd –c etc\csft_mysql.conf --console

备注:启动服务后,当前的cmd窗口不能使用,使用搜索服务时不能关掉窗口,如想在cmd窗口中进行操作,可另打开一个cmd窗口。



4)、停止搜索服务:

直接Ctrl+C



5)、搜索关键字:

bin\search –c etc\csft_mysql.conf –a 关键字1  关键字2  …



四、连接mysql数据库及搜索内容:在etc\下有两个配置文件csft.conf 和 csft_mysql.conf ,其中第一个是测试安装成功与否,跟数据库无关;第二个是与数据库连接,相关参数大家可以用编辑器打开参考(建议不要用记事本);往后要配置自己的文件,可以参考csft_mysql.conf文件内容的格式,往下我们以例子讲解。

1、  创建数据库test ,编码为utf-8,数据库SQL脚本如下:

(如果不懂得这一步的,可以去参数有关mysql数据库资料)

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(), '测试文档第一条', 'this is my test document number one. also checking search within phrases.' ),

    ( 2, 1, 6, NOW(), '测试文档第二条', 'this is my test document number two' ),

    ( 3, 2, 7, NOW(), '其它文档', 'this is another group' ),

    ( 4, 2, 8, NOW(), '第四条文档', 'this is to test groups' );



2、  配置数据库文件,这里使用官方准备好的配置文件 csft_mysql.conf ,里面已配置好与数据库test连接,及对数据表的查询等。





详细说明请访问官网:http://www.coreseek.cn/products-install/mysql/

      

3、  创建索引,这里创建csft_mysql.conf配置中的全部索引

在cmd中输入 bin\indexer –c etc\csft_mysql.conf --all





成功创建索引后的信息



4、  启动coreseek搜索服务

在cmd中输入 bin\searchd –c etc\csft_mysql.conf --console





成功启动服务后的信息



5、  实现搜索功能

在documents表中,搜索字段content中的内容含有“document”字符串的记录

在另一个cmd中输入 bin\search –c etc\csft_mysql.conf –a document





搜索后显示的信息

这里把搜索到的记录信息显示出来,其中title=?????? ,这是乱码问题,具体解决方法可以参考官方资料,这里不详细说明。



五、PHP与coreseek检索引擎实现搜索

如果要将搜索结果应用到自己的PHP程序之中,请使用api目录下对应的api接口测试。

1、将api目录下的sphinxapi.php 文件拷贝到PHP网站的目录下,这里我把它放在根目录下。



2、在根目录下创建index.php文件,代码如下:



<?php

//注意文件的编码格式需要保存为为UTF-8格式

require ( "sphinxapi.php" );



$cl = new SphinxClient ();

$cl->SetServer ( '127.0.0.1', 9312);

//以下设置用于返回数组形式的结果

$cl->SetArrayResult ( true );



/*

//ID的过滤

//$cl->SetIDRange(3,4);



//sql_attr_uint等类型的属性字段,需要使用setFilter过滤,类似SQL的WHERE group_id=2

//$cl->setFilter('group_id',array(2));



//sql_attr_uint等类型的属性字段,也可以设置过滤范围,类似SQL的WHERE group_id2>=6 AND group_id2<=8

//$cl->SetFilterRange('group_id2',6,8);

*/



//取从头开始的前20条数据,0,20类似SQl语句的LIMIT 0,20

//$cl->SetLimits(0,20);



//在做索引时,没有进行 sql_attr_类型 设置的字段,可以作为“document”,进行全文搜索

$res = $cl->Query ( ' document ', "*" );    //"*"表示在所有索引里面同时搜索,"索引名称"则表示搜索指定的



//如果需要搜索指定全文字段的内容,可以使用扩展匹配模式:

//$cl->SetMatchMode(SPH_MATCH_EXTENDED);

//$res=cl->Query( '@title 测试' , "*")



echo '<pre>';

print_r($res['matches']);

print_r($res);

echo '</pre>';

?>



       3、创建全部索引,启动搜索服务,相关操作可参考以上 “四、连接mysql数据库及搜索内容”。

      

       4、运行index.php文件,查看搜索结果:

              从结果中看,总共搜索出两条记录,全部存储在一个数组中。



Array

(

    [0] => Array

        (

            [id] => 1

            [weight] => 1

            [attrs] => Array

                (

                    [group_id] => 1

                    [date_added] => 1290775649

                )

        )



    [1] => Array

        (

            [id] => 2

            [weight] => 1

            [attrs] => Array

                (

                    [group_id] => 1

                    [date_added] => 1290775649

                )

        )

)

Array

(

    [error] =>                                            【本次查询的错误信息】

    [warning] =>

    [status] => 0

    [fields] => Array

        (

            [0] => title

            [1] => content

        )



    [attrs] => Array

        (

            [group_id] => 1

            [date_added] => 2

        )



    [matches] => Array                                【匹配到的文档信息】

        (

            [0] => Array

                (

                    [id] => 1                   【文档的ID】

                    [weight] => 1

                    [attrs] => Array

                        (

                            [group_id] => 1

                            [date_added] => 1290775649

                        )

                )



            [1] => Array

                (

                    [id] => 2

                    [weight] => 1

                    [attrs] => Array

                        (

                            [group_id] => 1

                            [date_added] => 1290775649

                        )

                )

        )



    [total] => 2                      【本次查询返回的结果数目,例如翻页等使用】

    [total_found] => 2            【整个系统包含的结果数目】

    [time] => 0.001                【查询使用的时间】

    [words] => Array              【分词结果】

        (

            [document] => Array

                (

                    [docs] => 2               【该词汇匹配到的文档数目】

                    [hits] => 2                【该词汇出现的次数】

                )

        )

)



这是本人经过几天的努力,摸索出来的一点点经验,希望能帮助有需要的朋友们!如有疑问请留言,我会尽量帮忙!谢谢!