zoukankan      html  css  js  c++  java
  • sphinx的简单实例

    sphinx.conf中的配置:

     1 source indexLocation
     2 {
     3     type            = mysql
     4 
     5     sql_host        = 192.168.1.113
     6     sql_user        = root
     7     sql_pass        = redidai@@2013
     8     sql_db            = redidai
     9     sql_port        = 3306    # optional, default is 3306
    10     
    11     sql_query_pre = SET NAMES utf8
    12     sql_query_pre = SET SESSION query_cache_type=OFF
    13     
    14     sql_query        = 
    15         SELECT a.location_id as id,a.location_id,a.location_name as `location_name`,a.location_name as `name`,a.location_bname,a.attach_id,a.showstatus,a.is_del,a.status,b.area_name as city_name FROM `ts_rdd_location` a LEFT JOIN `ts_rdd_area` b ON a.city_id = b.area_id
    16     #sql_attr_string =  name
    17     sql_attr_uint        = status
    18     #sql_attr_timestamp    = date_added
    19     sql_query_info        = SELECT * FROM `ts_rdd_location`  WHERE location_id = $id
    20 }
    21 
    22 
    23 index indexLocation
    24 {
    25     source            = indexLocation
    26     path            = /var/lib/sphinx/test1
    27     docinfo            = extern
    28     mlock          = 0                       #缓存数据内存锁定
    29     morphology     = none                    #形态学(对中文无效)
    30     min_word_len   = 2                       #索引的词最小长度
    31     charset_type   = utf-8
    32     min_prefix_len = 0                       #最小前缀
    33     html_strip     = 1
    34     ngram_len      = 1                       #对于非字母型数据的长度切割
    35     ngram_chars    = U+3000..U+2FA1F         #则会对每个中文,英文字词进行分割,速度会慢
    36 
    37     #字符表,注意:如使用这种方式,则sphinx会对中文进行单字切分,即进行字索引。
    38     #若要使用中文分词,必须使用其他分词插件如 coreseek,sfc
    39     charset_table  = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
    40 }
    41 
    42 
    43 
    44 
    45 indexer
    46 {
    47     mem_limit        = 32M
    48 }
    49 
    50 
    51 searchd
    52 {
    53     listen                  = 9312
    54     #listen            = 9306:mysql41
    55     log            = /var/log/sphinx/searchd.log
    56     query_log        = /var/log/sphinx/query.log
    57     read_timeout        = 5
    58     max_children        = 30
    59     pid_file        = /var/run/sphinx/searchd.pid
    60     max_matches        = 1000
    61     seamless_rotate        = 1
    62     preopen_indexes        = 1
    63     unlink_old        = 1
    64     compat_sphinxql_magics = 0
    65     #workers            = threads # for RT to work
    66     binlog_path        = /var/lib/sphinx
    67 }

    php代码:

     1 <?php
     2 class SearchAction extends AdministratorAction {
     3 
     4     public $sphinxClient = null;
     5 
     6     public function __construct() {
     7         parent::__construct();
     8 
     9         require_once SITE_PATH . '/sphinxapi.php';
    10 
    11         if ($this->sphinxClient == null) {
    12             $this->sphinxClient = new SphinxClient ();
    13         }
    14 
    15         $this->sphinxClient->SetServer('192.168.0.0', 9312);
    16         $this->sphinxClient->open();
    17     }
    18 
    19     public function QLocation($params = array()) {
    20         $searchWord = '';
    21         
    22         if (isset($params['keyword'])) {
    23             $searchWord = $params['keyword'];
    24         }
    25         
    26         $result = $this->suggestHandle($this->sphinxClient, $searchWord);
    27 
    28         $nodeResult = array();
    29 
    30         if ($result['total'] > 0) {
    31             $matches = array();
    32             
    33             foreach($result['matches'] as $mvale) {
    34                 $matches[] = $mvale['id'];
    35             }
    36             
    37             $matches_id = implode(",", $matches);
    38             
    39             $locationModel = D('RddLocation', 'admin');
    40             $list = $locationModel->getLocationListByID($matches_id);
    41             $nodeResult = $list;
    42         }
    43         
    44         print_r($nodeResult);exit;
    45 
    46         return $nodeResult;
    47     }
    48 
    49     public function suggestHandle($spx, $searchWord = ''){
    50         //$spx->SetSortMode(SPH_SORT_EXTENDED, "@weight DESC, larea DESC, is_recommend DESC, like_count DESC");
    51         $spx->SetSortMode(SPH_SORT_EXTENDED, "@weight DESC");
    52         $spx->ResetFilters();
    53         //$cityId = filter_input(INPUT_GET, 'area', FILTER_SANITIZE_STRING);
    54         //$spx->SetFilter('showstatus', array('Y'));
    55         //$spx->SetFilter('is_del', array('0'));
    56         $spx->SetFilter('status', array(1));
    57         //$result = $spx->Query($searchWord, 'plan14_location,delta_plan14_location');
    58         $spx->SetArrayResult(true);
    59         $result = $spx->Query($searchWord, 'indexLocation');
    60         //var_dump($spx);
    61         return $result;
    62     }
    63 
    64 }

    调用:

    $searchAction = new SearchAction();
            $list = $searchAction->QLocation(array('keyword' => $name));
  • 相关阅读:
    查询,创建,扩充表空间&&impdp--------表空间大全
    TOJ3660家庭关系(并查集+hash+图的连通性)
    [置顶] iptables 性能 测试
    CSU1312:榜单(模拟)
    uvalive 2326
    TOJ 2732存钱计划(三)(单源最短路)
    CSU1315:全场最水题之陈兴老师与比赛
    【图像处理】最临近插值和双线性内插值算法实现比较
    poj 3090 Visible Lattice Points 法利系列||通过计
    美丽的谎言(王愿共勉)
  • 原文地址:https://www.cnblogs.com/xingmeng/p/3428878.html
Copyright © 2011-2022 走看看