zoukankan      html  css  js  c++  java
  • PHP搜索优化 sphinx 实战

    环境:win7 64 wamp

    解压sphinx安装包后,简历如下结构。注意,conf目录是我的配置文件目录

    在conf目录下,简历newdefend.conf文件,配置内容如下

    # 配置数据源
    source domain_src
    {
        type            = mysql
        sql_host        = 192.168.185.210
        sql_user        = root
        sql_pass        =
        sql_db            = mydb
        sql_port        = 3306    
        
        sql_ranged_throttle    = 0
        sql_query_pre        = SET NAMES utf8
        # sql_query_pre       = SET SESSION query_cache_type=OFF
        sql_query_pre         = REPLACE INTO sph_counter SELECT 1, MAX(id) FROM domain
       # 注意这个地方,至少要有各自字段没有定义成sql_attr_***,好像是需要有一个字段是全文索引什么的。反正多查询一个字段就对了。或者定义一个sql_field_string也可以 sql_query
    = SELECT id,uid,type,package_level,ct,domain FROM domain WHERE id<=( SELECT max_id FROM sph_counter WHERE counter_id = 1 ) sql_attr_uint = uid sql_attr_uint = type sql_attr_uint = package_level # sql_field_string = ct sql_attr_timestamp = ct } # 配置增量数据源 source delta_domain_src:domain_src{ sql_ranged_throttle = 100 sql_query_pre = SET NAMES utf8 # sql_query_pre = SET SESSION query_cache_type=OFF sql_query = SELECT id,uid,type,package_level,ct,domain FROM domain WHERE id>( SELECT max_id FROM sph_counter WHERE counter_id = 1 ) } # 索引 index domain_suggest { source = domain_src path = D:/sphinx/data/domain_suggest charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F docinfo = extern dict = keywords mlock = 0 morphology = none min_word_len = 1 ngram_len = 1 ngram_chars = U+3000..U+2FA1F html_strip = 0 } # 增量索引 index delta_domain_suggest:domain_suggest { source = delta_domain_src path = D:/sphinx/data/delta_domain_suggest } indexer { mem_limit = 128M } # 配置Sphinx服务器的信息 searchd { listen = 9312 listen = 9306:mysql41 log = D:/sphinx/log/searchd.log query_log = D:/sphinx/log/query.log read_timeout = 5 client_timeout = 300 max_children = 30 persistent_connections_limit = 30 pid_file = D:/sphinx/log/searchd.pid preopen_indexes = 1 unlink_old = 1 mva_updates_pool = 1M max_packet_size = 8M max_filters = 256 max_filter_values = 4096 max_batch_queries = 32 workers = threads # windows下启动searchd服务一定要注释掉这个   # seamless_rotate = 1 # 开启sphinx服务时,会生成几个log文件,这里配置文件生成目录。默认会生成在searchd.exe同级目录下 binlog_path = D:/sphinx/log/ }

    定义一个启动sphinx的脚本“sphinx重启.bat”。脚本内容如下,双击启动

    @echo off 
    
    ::停止sphinx服务
    d:/sphinx/bin/searchd --stop
    
    ::建立配置文件中所有索引(也可以建立某个索引)
    d:/sphinx/bin/indexer -c d:/sphinx/conf/newdefend.conf --all
    
    ::启动sphinx服务
    d:/sphinx/bin/searchd -c d:/sphinx/conf/newdefend.conf
    
    ::窗口不要关闭
    pause

    启动成功界面

    测试代码

    $keyword = '';
    $sphinx = new SphinxClient;
    $sphinx->setServer("localhost", 9312);
    $sphinx->setMatchMode(SPH_MATCH_ALL);   //匹配模式 ANY为关键词自动拆词,ALL为不拆词匹配(完全匹配)
    $sphinx->SetArrayResult ( true );    //返回的结果集为数组
    $result = $sphinx->query($keyword,"domain_suggest delta_domain_suggest");    //星号为所有索引源
    $count=$result['total'];        //查到的结果条数
    $time=$result['time'];            //耗时
    $arr=$result['matches'];        //结果集
    $id='';
    foreach($arr as $i => $val){
        $id.=$arr[$i]['id'].',';
    }
    $id=substr($id,0,-1);            //结果集的id字符串
    
    echo $id;

    运行结果

  • 相关阅读:
    Java基础教程:面向对象编程[3]
    Java拓展教程:文件DES加解密
    JavaScript:学习笔记(4)——This关键字
    jQuery:[2]百度地图开发平台实战
    Android开发——减小APK大小
    玩转ButterKnife注入框架
    Java技术——多态的实现原理
    RxAndroid结合Retrofit,看看谁才是最佳拍档!
    Android开发——AsyncTask的使用以及源码解析
    10本比较鸡肋的技术类书籍,简要回顾
  • 原文地址:https://www.cnblogs.com/qq917937712/p/8930833.html
Copyright © 2011-2022 走看看