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));
  • 相关阅读:
    数学+高精度 ZOJ 2313 Chinese Girls' Amusement
    最短路(Bellman_Ford) POJ 1860 Currency Exchange
    贪心 Gym 100502E Opening Ceremony
    概率 Gym 100502D Dice Game
    判断 Gym 100502K Train Passengers
    BFS POJ 3278 Catch That Cow
    DFS POJ 2362 Square
    DFS ZOJ 1002/HDOJ 1045 Fire Net
    组合数学(全排列)+DFS CSU 1563 Lexicography
    stack UVA 442 Matrix Chain Multiplication
  • 原文地址:https://www.cnblogs.com/xingmeng/p/3428878.html
Copyright © 2011-2022 走看看