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));
原文地址:https://www.cnblogs.com/xingmeng/p/3428878.html