用coreseek搜索ecshop商品

2012-10-13 11:10 来源:www.chinab4c.com 作者:ecshop专家

      用coreseek搜索ecshop商品,当你的产品非常多的时候,你就要考虑搜索的问题了。ecshop的商品搜索功能,确实不敢恭维,用的都是like模糊搜索,也就是说不但不会分词,而且在搜索的时候,虽然是可以通过goods_name,goods_desc,goods_sn 进行搜索,但是在ecshop中,一旦这个搜索在大量的数据下,就发挥不了作用了。

     我们可以在coreseek中下功夫,就是通过配置coreseek搜索引擎,来针对ecshop的商品进行搜索。

     1:配置好coreseek的csft.conf

   source mysql
{
    type                    = mysql

    sql_host                = localhost
    sql_user                = root
    sql_pass                = root
    sql_db                    = 272utfzhifu
    sql_port                = 3306
    sql_query_pre            = SET NAMES utf8

    sql_query                = SELECT goods_id as id, cat_id, brand_id,  goods_name as title ,goods_desc FROM ecs_goods
                                                              #sql_query第一列id需为整数
                                                              #title、content作为字符串/文本字段,被全文索引
    sql_attr_uint            = cat_id           #从SQL读取到的值必须为整数
    #sql_attr_timestamp       = date_added   #从SQL读取到的值必须为整数,作为时间属性
    sql_attr_uint    = brand_id

    sql_query_info_pre      = SET NAMES utf8                                        #命令行查询时,设置正确的字符集
    #sql_query_info          = SELECT goods_id, goods_name FROM ecs_goods WHERE goods_id=$id #命令行查询时,从数据库读取原始数据信息
}

#index定义
index mysql
{
    source            = mysql             #对应的source名称
    path            =  D:/coreseek/var/data/mysql #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
    docinfo            = extern
    mlock            = 0
    morphology        = none
    min_word_len        = 1
    html_strip                = 0
    charset_table = 0..9, A..Z->a..z, _, a..z, U+00AD, U+410..U+42F->U+430..U+44F, U+430..U+44F
    charset_type  = utf-8
    enable_star  = 1
 min_infix_len = 2
 ngram_len = 0

}
2:进行搜索封装。

require ( "sphinxapi.php" );

$cl = new SphinxClient ();
$cl->SetServer ( '127.0.0.1', 9312);
$cl->SetConnectTimeout ( 3 );
$cl->SetArrayResult ( true );
$cl->SetMatchMode ( SPH_MATCH_ANY);
$res = $cl->Query ( 'BC01', "mysql" );

比如我要搜索BC01的产品,可以通过配置csft.conf goods_name as title ,goods_desc 来进行全文搜索。

3:处理返回的数据。

 

[matches] => Array
        (
            [0] => Array
                (
                    [id] => 20
                    [weight] => 2
                    [attrs] => Array
                        (
                            [cat_id] => 3
                            [brand_id] => 6
                        )

                )

            [1] => Array
                (
                    [id] => 24
                    [weight] => 1
                    [attrs] => Array
                        (
                            [cat_id] => 3
                            [brand_id] => 9
                        )

                )

        )

      这里的id就ecshop商品goods_id,同时返回了该商品的分类。上一章,我们讨论了coreseek来搜索ecshop会员

     来源:http://www.chinab4c.com