SHOPNC 中开启sphinx全文检索

SHOPNC只支持迅搜全文检索

但通过修改可以添加shpinx/coreseek中文全文检索

安装coreseek,这个网上有很多教程,这里不再多嘴

修改:/data/config/config.ini.php
$config['fullindexer']['open']      = true;
$config['fullindexer']['type']      = 'coreseek';
$config['fullindexer']['coreseek']['server']      = '0573shop.vicp.net';
$config['fullindexer']['coreseek']['port']      = 9312;
$config['fullindexer']['coreseek']['querylimit']      = 20;
$config['fullindexer']['coreseek']['rankingmode']      = NULL;
$config['fullindexer']['coreseek']['matchmode']      = NULL;
$config['fullindexer']['coreseek']['index_shop']      = 'shop';
$config['fullindexer']['coreseek']['index_store']      = 'store_list';

修改/shop/control/search.php:
public function auto_completeOp() {
   try {
            if(C('fullindexer.appname')){
           require(BASE_DATA_PATH.'/api/xs/lib/XS.php');
           $obj_doc = new XSDocument();
           $obj_xs = new XS(C('fullindexer.appname'));
           $obj_index = $obj_xs->index;
           $obj_search = $obj_xs->search;
           $obj_search->setCharset(CHARSET);
                $corrected = $obj_search->getExpandedQuery($_GET['term']);
                if (count($corrected) !== 0) {
                    $data = array();
                    foreach ($corrected as $word)
                    {
                        $row['id'] = $word;
                        $row['label'] = $word;
                        $row['value'] = $word;
                        $data[] = $row;
                    }
                    exit(json_encode($data));
                }
            }elseif(C('fullindexer.type')=='coreseek'){
                //try{


                    require ( BASE_DATA_PATH.'/api/sphinxapi.php' );


                    $cl = new SphinxClient ();
                    $cl->SetServer ( C('fullindexer.coreseek.server'), C('fullindexer.coreseek.port'));
                    $cl->SetConnectTimeout ( 20 );
                    $cl->SetArrayResult ( true );
                    //$cl->SetMatchMode ( SPH_MATCH_ANY);
                    //echo iconv( 'UTF-8', 'GBK',$_GET['term']); //将字符串的编码从GB2312转到UTF-8 
                    //$cl->SetFilter ( "goods_name", [$_GET['term']]);
                    $res = $cl->Query ( $_GET['term'], "*" );
                    //exit(json_encode($res));
                    //php echo urlShop('goods','index',array('goods_id'=>$v['goods_id']));
                    if(count($res['matches'])>0){
                        $data = array();
                        //$md =  Model('goods');
                        foreach($res['matches'] as $item){
                            if(!$item['attrs']['goods_name'])continue;
                            $row=array();
                            $row['id'] = $item['id'];
                            //$good = $md->getGoodsInfo(array('goods_id'=>$item['id']));
                            $row['value'] = $item['attrs']['goods_name'];;// // $good['goods_jingle'];// 
                            $row['label'] = $item['attrs']['goods_name']; //$good['goods_name'];// 在下拉框中的值
                            $row['url']    = urlShop('goods','index',array('goods_id'=>$item['id'])); 
                            $data[] = $row;
                        }
                        //$data[] = $res;
                        exit(json_encode($data));
                    }
               // }
            }
        } catch (XSException $e) {
            if (is_object($obj_index)) {
                $obj_index->flushIndex();
            }
//             Log::record('search\auto_complete'.$e->getMessage(),Log::RUN);
        }
}
实现了首页搜索框的自动完成

附coreseek conf文件参考:



#源定义
source shop
{
    type                    = mysql


    sql_host                = DBHOST
    sql_user                = DBUSER
    sql_pass                = DBPASS
    sql_db                    = DBNAME
    sql_port                = 3306
    sql_query_pre            = SET NAMES utf8


    sql_query                = SELECT goods_id, goods_name, store_id FROM shopnc_goods
                                                              #sql_query第一列id需为整数
                                                              #title、content作为字符串/文本字段,被全文索引
    #sql_attr_uint            = goods_id           #从SQL读取到的值必须为整数
    sql_attr_uint            = store_id           #从SQL读取到的值必须为整数
    #sql_attr_timestamp        = date_added #从SQL读取到的值必须为整数,作为时间属性
    #sql_attr_string           = goods_name
    # sql_field_string         = store_name
    sql_field_string          = goods_name
    sql_query_info_pre      = SET NAMES utf8                                        #命令行查询时,设置正确的字符集
    sql_query_info            = SELECT * FROM shopnc_goods WHERE goods_id=$id #命令行查询时,从数据库读取原始数据信息
}
source store_list 
{
    type                    = mysql
    sql_host                = localhost
    sql_user                = root
    sql_pass                = root
    sql_db                    = shopnc
    sql_port                = 3306
    sql_query_pre            = SET NAMES utf8
    sql_query  = SELECT store_id , store_name, grade_id,member_name,seller_name,store_address,store_keywords,\
    store_description,store_qq FROM shopnc_store
    sql_field_string         = store_name
    sql_field_string         = member_name
    sql_field_string         = store_address
    sql_field_string         = store_description
}


#index定义
index shop
{
    source            = shop             #对应的source名称
    path            = E:/public/coreseek41/var/data/shop #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
    docinfo            = extern
    mlock            = 0
    morphology        = none
    min_word_len        = 1
    html_strip                = 0


    #中文分词配置,详情请查看:http://www.coreseek.cn/products-install/coreseek_mmseg/
    #charset_dictpath = /usr/local/mmseg3/etc/ #BSD、Linux环境下设置,/符号结尾
    charset_dictpath = E:/public/coreseek41/etc/                           #Windows环境下设置,/符号结尾,最好给出绝对路径,例如:C:/usr/local/coreseek/etc/...
    charset_type        = zh_cn.utf-8
    #以下部分为中文分词核心配置
    #stopwords      = /path/to/stowords.txt的位置
    ngram_len                    = 0
    #以上部分为中文分词核心配置
}
index store_list:shop
{
    source = store_list
    path            = E:/public/coreseek41/var/data/store_list 
}
#全局index定义
indexer
{
    mem_limit            = 128M
}


#searchd服务定义
searchd
{
    listen                  =   9312
    read_timeout        = 5
    max_children        = 30
    max_matches            = 1000
    seamless_rotate        = 0
    preopen_indexes        = 0
    unlink_old            = 1
    pid_file = E:/public/coreseek41/var/log/searchd_mysql.pid  #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
    log = E:/public/coreseek41/var/log/searchd_mysql.log        #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
    query_log = E:/public/coreseek41/var/log/query_mysql.log #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
    binlog_path =                                #关闭binlog日志
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值