搜索系统建立指南



以下使用MySQL数据源进行说明,其他系统可以参考配置。关于MySQL数据源的具体配置,可以查看:MySQL数据源配置说明





第一步:安装

  安装coreseek请参考:BSD、Linux、Windows系统安装测试说明文档

  安装后,请确保安装测试说明文档中的各项测试都可以通过,以便coreseek做好准备,为你服务!









第二步:配置:

  在BSD/Linux安装包的testpack/etc目录下,放置了演示的配置文件;

  在Windows安装包的etc目录下,也放置了演示的配置文件;



  如果是mysql数据库,可以将csft_mysql.conf拷贝为自己的配置文件,然后进行修改!其他数据库可以参考python数据源;



  要查看配置的细节,可以访问Coreseek/Sphinx(0.9)中文手册了解详情和具体的配置参数。



  配置文件的核心,为source和index配置,两者是成对出现的;如果需要设置针对多种情况或者多个数据表的索引,则可针对每一个编写对应的source和index配置;

  source表示从何处取得原始数据,也就是数据源;index表示取得数据后如何索引;

  source配置中,请确保可以使用给出的数据库服务器地址、用户、密码连接到对应的数据库,执行获取数据的SQL语句可以得到数据;否则coreseek无法得到数据,也就无法提供服务了。

  一般情况下,sql_query给出读取数据的SQL语句,第一列为自增的ID字段,然后可以包括字符串字段,整数数值字段;整数数值字段需要在后面使用sql_attr_uint明确标注,有多个则分别标注即可。

  index配置中,需要注意修改path参数,确保不与其他的搜索服务发生冲突;最后的search的配置中,也要修改对应的路径参数和端口参数,以防止冲突发生;









第三步:测试

  首先,索引:使用bin目录下的indexer,执行:indexer -c 配置文件的路径 index名称

# /usr/local/coreseek/bin/indexer -c etc/csft.conf --all    ##--all表示全部索引
##Windows下面为bin\indexer -c etc\csft.conf --all
##以下为正常索引全部数据时的提示信息:部分数据信息根据实际数据情况变化
    Coreseek Fulltext 3.2 [ Sphinx 0.9.9-release (r2117)]
    Copyright (c) 2007-2010,
    Beijing Choice Software Technologies Inc (http://www.coreseek.com)

     using config file 'etc/csft.conf'...
    indexing index '索引名称'...
    collected 3 docs, 0.0 MB
    sorted 0.0 Mhits, 100.0% done
    total 3 docs, 7585 bytes
    total 0.075 sec, 101043 bytes/sec, 39.96 docs/sec
    total 2 reads, 0.000 sec, 5.6 kb/call avg, 0.0 msec/call avg
    total 7 writes, 0.000 sec, 3.9 kb/call avg, 0.0 msec/call avg
  如果出现以上对应的提示,则表示配置正确,可以正常索引;



  随后,启动搜索:使用bin目录下的searchd,执行:searchd -c 配置文件的路径 --console

# /usr/local/coreseek/bin/searchd -c etc/csft.conf --console
##Windows下面为bin\searchd -c etc\csft.conf --console
##以下为正常开启搜索服务时的提示信息:其中的port可以在配置文件中修改
    Coreseek Fulltext 3.2 [ Sphinx 0.9.9-release (r2117)]
    Copyright (c) 2007-2010,
    Beijing Choice Software Technologies Inc (http://www.coreseek.com)

    using config file 'etc/csft.conf'...
    listening on all interfaces, port=9312

  如要继续测试搜索功能,请不要停止searchd,否则其他程序将无法连接到搜索服务端

  BSD/Linux环境下,测试成功后:

    如要后台运行服务,则使用:searchd -c 配置文件的路径,将searchd作为后台服务运行;

    如果要停止后台服务,则使用:searchd -c 配置文件的路径 --stop;

    如果要更新后台服务的索引,则使用:indexer -c 配置文件的路径 index名称




  然后,可以参考安装测试说明文档使用bin目录下的search进行测试,检查搜索是否可以正常进行;





  如果要将搜索结果应用到自己的程序之中,请使用api目录下对应的api接口测试。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_类型 设置的字段,可以作为“搜索字符串”,进行全文搜索
$res = $cl->Query ( '搜索字符串', "*" );    //"*"表示在所有索引里面同时搜索,"索引名称(例如test或者test,test2)"则表示搜索指定的

//如果需要搜索指定全文字段的内容,可以使用扩展匹配模式:
//$cl->SetMatchMode(SPH_MATCH_EXTENDED);
//$res=cl->Query( '@title (测试)' , "*");
//$res=cl->Query( '@title (测试) @content ('网络')' , "*");


echo '<pre>';
print_r($res['matches']);
print_r($res);
print_r($cl->GetLastError());
print_r($cl->GetLastWarning());
echo '</pre>';


  返回结果之中(可见本页面最后的”搜索结果示例“),将包含match和word部分,match部分表示搜索到的结果,word部分表示搜索字符串的切分结果,total表示搜索到的结果总数;

  如果total为0,可以print_r($cl)查看搜索服务器是否返回了错误提示信息,或者检查搜索字符串是否真的可以匹配信息。

  match之中,包含了获取到的数据的ID信息,以及所包含的整数字段的属性信息,根据ID信息,可以从数据库之中,取到对应的原始数据的信息,以供页面显示或者其他程序使用;
MySQL读取示例:

SELECT * FROM 数据表 WHERE ID IN(id1,id2,id3...,idn) ORDER BY FIND_IN_SET(ID,"id1,id2,id3...,idn")



  具体的搜索API,还包括排序、过滤等,可以访问Coreseek/Sphinx(0.9)中文手册了解API详情和具体的使用方式。

  然后,你就可以在你的其他用用之中,包含以上的代码,并根据自己的需要,将用户或者其他代码传递的参数应用到搜索上面来,并根据返回的结果获取对应的数据进行显示或者处理!







搜索结果示例:

Array
(
    [error] =>                             【本次查询的错误信息】
    [warning] => 
    [status] => 0
    [fields] => Array
        (
            [0] => title
            [1] => content
        )

    [attrs] => Array
        (
            [published] => 2
            [author_id] => 1
            [a] => 1
        )

    [matches] => Array                  【匹配到的文档信息】
        (
            [0] => Array
                (
                    [id] => 3                 【文档的ID】
                    [weight] => 1680
                    [attrs] => Array
                        (
                            [published] => 1270094460
                            [author_id] => 2
                            [a] => 0
                        )

                )

        )

    [total] => 1                              【本次查询返回的结果数目,例如翻页等使用】
    [total_found] => 1                     【整个系统包含的结果数目】
    [time] => 0.136                         【查询使用的时间】
    [words] => Array                      【分词结果】
        (
            [服务器] => Array
                (
                    [docs] => 1              【该词汇匹配到的文档数目】
                    [hits] => 1               【该词汇出现的次数】
                )

        )

)


上一篇: 安装使用
下一篇: API/接口/客户端