1. 程式人生 > >搭建coreseek(sphinx+mmseg3)詳細安裝配置+php之sphinx擴充套件安裝+php呼叫示例

搭建coreseek(sphinx+mmseg3)詳細安裝配置+php之sphinx擴充套件安裝+php呼叫示例

[第一步] 先安裝mmseg3

    cd /var/install  
    wget http://www.coreseek.cn/uploads/csft/4.0/coreseek-4.1-beta.tar.gz  
    tar zxvf coreseek-4.1-beta.tar.gz  
      
    cd coreseek-4.1-beta  
    cd mmseg-3.2.14  
    ./bootstrap  
    ./configure --prefix=/usr/local/mmseg3  
    make && make install  
      
    遇到的問題:  
    error: cannot find input file: src/Makefile.in  
    或者遇到其他類似error錯誤時...  
      
    解決方案:  
    依次執行下面的命令,我執行'aclocal'時又出現了錯誤,解決方案請看下文描述  
      
    yum -y install libtool  
      
    aclocal  
    libtoolize --force  
    automake --add-missing  
    autoconf  
    autoheader  
    make clean 

安裝好'libtool'繼續從'aclocal'開始執行上面提到的一串命令,執行完後再執行最開始的安裝流程即可。

[第二步] 安裝coreseek

    ##安裝coreseek  
    $ cd csft-3.2.14 或者 cd csft-4.0.1 或者 cd csft-4.1  
    $ sh buildconf.sh                                         #輸出的warning資訊可以忽略,如果出現error則需要解決  
    $ ./configure --prefix=/usr/local/coreseek  --without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/mmseg3/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg3/lib/ --with-mysql  
    ##如果提示mysql問題,可以檢視MySQL資料來源安裝說明   http://www.coreseek.cn/product_install/install_on_bsd_linux/#mysql  
    $ make && make install  
    $ cd ..  
      
      
    ##命令列測試mmseg分詞,coreseek搜尋(需要預先設定好字符集為zh_CN.UTF-8,確保正確顯示中文)  
    $ cd testpack  
    $ cat var/test/test.xml    #此時應該正確顯示中文  
    $ /usr/local/mmseg3/bin/mmseg -d /usr/local/mmseg3/etc var/test/test.xml  
    $ /usr/local/coreseek/bin/indexer -c etc/csft.conf --all  
    $ /usr/local/coreseek/bin/search -c etc/csft.conf 網路搜尋 

出現這個 xmlpipe2 support NOT compiled in. To use xmlpipe2, install missing XML libra  錯誤

執行以下命令:yum -y install expat expat-devel 

依次安裝後,從新編譯coreseek,然後再生成索引,就可以通過了。

下面開始sphinx與mysql的配置

建立sphinx統計表,在coreseek_test庫中執行。

  1.     CREATE TABLE sph_counter  
        (  
            counter_id INTEGER PRIMARY KEY NOT NULL,  
            max_doc_id INTEGER NOT NULL  
        );
建立配置sphinx與mysql的配置檔案

# vi /usr/local/coreseek/etc/csft_mysql.conf 

    #MySQL資料來源配置,詳情請檢視:http://www.coreseek.cn/docs/coreseek_4.1-sphinx_2.0.1-beta.html#conf-reference  
      
    #源定義  
    source main  
    {  
        type                    = mysql  
      
        sql_host                = localhost  
        sql_user                = root  
        sql_pass                = 123456   
        sql_db                  = coreseek_test  
        sql_port                = 3306  
        sql_query_pre           = SET NAMES utf8  
        sql_query_pre        = REPLACE INTO sph_counter SELECT 1,MAX(id) FROM hr_spider_company;  
        sql_query               = SELECT * FROM hr_spider_company WHERE id<=( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )   
                                                             #sql_query第一列id需為整數  
                                                             #title、content作為字串/文字欄位,被全文索引  
        sql_attr_uint            = id                        #從SQL讀取到的值必須為整數  
        sql_attr_uint            = from_id                #從SQL讀取到的值必須為整數,不支援全文檢索  
        sql_attr_uint            = link_id                #從SQL讀取到的值必須為整數,不支援全文檢索  
        sql_attr_uint            = add_time                #從SQL讀取到的值必須為整數,不支援全文檢索  
        sql_field_string         = link_url                 #字串欄位(可全文搜尋,可返回原始文字資訊)  
        sql_field_string          = company_name          #字串欄位(可全文搜尋,可返回原始文字資訊)  
        sql_field_string          = type_name             #字串欄位(可全文搜尋,可返回原始文字資訊)  
        sql_field_string          = trade_name             #字串欄位(可全文搜尋,可返回原始文字資訊)  
        sql_field_string          = email                 #字串欄位(可全文搜尋,可返回原始文字資訊)  
        sql_field_string          = description             #字串欄位(可全文搜尋,可返回原始文字資訊)  
      
        sql_query_info_pre      = SET NAMES utf8         #命令列查詢時,設定正確的字符集  
        sql_query_info            = SELECT id,from_id,link_id,company_name,type_name,trade_name,address,description, FROM_UNIXTIME(add_time) AS add_time  FROM hr_spider_company  WHERE id=$id                     #命令列查詢時,從資料庫讀取原始資料資訊  
    }  
      
    source delta : main    
    {    
        sql_query_pre           = SET NAMES utf8    
        sql_query               = SELECT * FROM hr_spider_company WHERE id>( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )  
        sql_query_post_index    = REPLACE INTO sph_counter SELECT 1,MAX(id) FROM hr_spider_company  
    }    
      
      
      
    #index定義  
    index main  
    {  
        source                = main                         #對應的source名稱  
        path                  = /usr/local/coreseek/var/data/mysql     #請修改為實際使用的絕對路徑,例如:/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_type        = zh_cn.utf-8  
    }  
      
    index delta : main    
    {    
        source          = delta    
        path            = /usr/local/coreseek/var/data/delta   
    }  
      
      
    #全域性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         = /usr/local/coreseek/var/log/searchd_mysql.pid   #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/...  
        log             = /usr/local/coreseek/var/log/searchd_mysql.log        #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/...  
        query_log         = /usr/local/coreseek/var/log/query_mysql.log    #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/...  
        binlog_path     =                                              #關閉binlog日誌  
    } 

我的測試表名為hr_spider_company,你只需要根據實際需求更改為自己的表名即可。

啟動後臺服務(必須開啟)

# /usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/csft_mysql.conf 

執行索引(查詢、測試前必須執行一次)

/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft_mysql.conf --all --rotate 

執行增量索引

/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft_mysql.conf delta --rotate 

合併索引

/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft_mysql.conf --merge main delta --rotate --merge-dst-range deleted 0 0 
(為了防止多個關鍵字指向同一個文件加上--merge-dst-range deleted 0 0)

後臺服務測試

# /usr/local/coreseek/bin/search -c /usr/local/coreseek/etc/csft_mysql.conf  aaa 

關閉後臺服務

# /usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/csft_mysql.conf --stop 

自動化命令:

crontab -e 
*/1 * * * * /bin/sh /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft_mysql.conf delta --rotate  
*/5 * * * * /bin/sh /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft_mysql.conf --merge main delta --rotate --merge-dst-range deleted 0 0  
30 1 * * *  /bin/sh /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft_mysql.conf --all --rotate

以下任務計劃的意思是:每隔一分鐘執行一遍增量索引,每五分鐘執行一遍合併索引,每天1:30執行整體索引。

Sphinx擴充套件安裝安裝

Coreseek官方教程中建議php使用直接include一個php檔案進行操作,事實上php有獨立的sphinx模組可以直接操作coreseek(coreseek就是sphinx!)已經進入了php的官方函式庫,而且效率的提升不是一點點!但php模組依賴於libsphinxclient包。

[第一步] 安裝依賴libsphinxclient

    # cd /var/install/coreseek-4.1-beta/csft-4.1/api/libsphinxclient/  
    # ./configure  --prefix=/usr/local/sphinxclient  
      
    configure: creating ./config.status  
    config.status: creating Makefile  
    config.status: error: cannot find input file: Makefile.in   #報錯configure失敗      
      
    //處理configure報錯  
    編譯過程中報了一個config.status: error: cannot find input file: src/Makefile.in這個的錯誤,然後執行下列指令再次編譯就能通過了:  
    # aclocal  
    # libtoolize --force  
    # automake --add-missing  
    # autoconf  
    # autoheader  
    # make clean  
      
    //從新configure編譯  
    # ./configure  
      
    # make && make install 

[第二步] 安裝sphinx的PHP擴充套件

    http://pecl.php.net/package/sphinx  
    # wget http://pecl.php.net/get/sphinx-1.3.0.tgz  
    # tar zxvf sphinx-1.3.0.tgz  
    # cd sphinx-1.3.0  
    # phpize  
    # ./configure --with-php-config=/usr/bin/php-config --with-sphinx=/usr/local/sphinxclient  
    # make && make install  
    # cd /etc/php.d/  
    # cp gd.ini  sphinx.ini  
    # vi sphinx.ini  
      
    extension=sphinx.so  
      
    # service php-fpm restart 

開啟phpinfo看一下是否已經支援了sphinx模組。

php呼叫sphinx示例:

    <?php  
        $s = new SphinxClient;  
        $s->setServer("127.0.0.1", 9312);  
      
        $s->setMatchMode(SPH_MATCH_PHRASE);  
        $s->setMaxQueryTime(30);  
        $res = $s->query("寶馬",'main'); #[寶馬]關鍵字,[main]資料來源source  
        $err = $s->GetLastError();  
        var_dump(array_keys($res['matches']));  
        echo "<br>"."通過獲取的ID來讀取資料庫中的值即可。"."<br>";  
          
        echo '<pre>';  
        var_dump($res);  
        var_dump($err);  
        echo '</pre>'; 

呼叫示例二:支援分頁


    <?php  
        header("Content-type: text/html; charset=utf-8");  
        require("./sphinxapi.php");  
        $s = new SphinxClient;  
        $s->setServer("192.168.252.132", 9312);  
          
        //SPH_MATCH_ALL, 匹配所有查詢詞(預設模式); SPH_MATCH_ANY, 匹配查詢詞中的任意一個; SPH_MATCH_EXTENDED2, 支援特殊運算子查詢  
        $s->setMatchMode(SPH_MATCH_ALL);  
        $s->setMaxQueryTime(30);                                     //設定最大搜索時間  
        $s->SetArrayResult(false);                                       //是否將Matches的key用ID代替  
        $s->SetSelect ( "*" );                                           //設定返回資訊的內容,等同於SQL  
        $s->SetRankingMode(SPH_RANK_BM25);                               //設定評分模式,SPH_RANK_BM25可能使包含多個詞的查詢的結果質量下降。   
        //$s->SetSortMode(SPH_SORT_EXTENDED);                            //發現增加此引數會使結果不準確  
        //$s->SetSortMode(SPH_SORT_EXTENDED,"from_id asc,id desc");      //設定匹配項的排序模式, SPH_SORT_EXTENDED按一種類似SQL的方式將列組合起來,升序或降序排列。  
        $weights = array ('company_name' => 20);  
        $s->SetFieldWeights($weights);                                   //設定欄位權重  
        $s->SetLimits ( 0, 30, 1000, 0 );                                //設定結果集偏移量  SetLimits (便宜量,匹配項數目,查詢的結果集數預設1000,閥值達到後停止)  
        //$s->SetFilter ( $attribute, $values, $exclude=false );     //設定屬性過濾  
        //$s->SetGroupBy ( $attribute, $func, $groupsort="@group desc" );    //設定分組的屬性  
        $res = $s->query('@* "汽車"','main','--single-0-query--'); #[寶馬]關鍵字,[news]資料來源source  
          
          
        //程式碼高亮  
        $tags = array();  
        $tags_name = array();  
        foreach($res['matches'] as $key=>$value){  
            $tags[] = $value['attrs'];  
            $company_name[] = $value['attrs']['company_name'];  
            $description[] = $value['attrs']['description'];  
        }  
        $company_name = $s->BuildExcerpts ($company_name, 'main', '汽車', $opts=array() );     //執行高亮,這裡索引名字千萬不能用*  
        $description = $s->BuildExcerpts ($description, 'main', '汽車', $opts=array() );       //執行高亮,這裡索引名字千萬不能用*  
        foreach($tags as $k=>$v)  
        {  
            $tags[$k]['company_name'] = $company_name[$k];  //高亮後覆蓋  
            $tags[$k]['description'] = $description[$k];    //高亮後覆蓋  
        }  
          
        // 高亮後覆蓋  
        $i = 0;  
        foreach($res['matches'] as $key=>$value){  
            $res['matches'][$key] = $tags[$i];  
            $i++;  
        }  
          
        $err = $s->GetLastError();  
          
        echo '<pre>';  
        var_export($res);  
        var_export($err);  
        echo '</pre>'; 

使用中可參考:http://www.coreseek.cn/docs/coreseek_4.1-sphinx_2.0.1-beta.html#api-reference

相關推薦

搭建coreseek(sphinx+mmseg3)詳細安裝配置+phpsphinx擴充套件安裝+php呼叫示例

[第一步] 先安裝mmseg3     cd /var/install       wget http://www.coreseek.cn/uploads/csft/4.0/coreseek-4.1-beta.tar.gz       tar zxvf coreseek-

CentOS 6.4安裝配置LNMP服務器(Nginx+PHP+MySQL)

mysql- ket 是否 分號 使用 store 重啟 isa tpi 一 安裝篇 1. 安裝nginx yum check-update #更新yum源 yum remove httpd* php* #刪除系統自帶的軟件包 yum install nginx #安裝ng

linux系統安裝配置exim4(源碼安裝

testing iconv uri linux系統安裝 5.0 tab sea action /usr 一、Exim4概述 Exim是一個MTA(Mail Transfer Agent,郵件傳輸代理)服務器軟件,該軟件基於GPL協議開發,是一款開源軟件。該軟件主要運行

OPENWRT安裝配置指南 17.01.4 LEDE

普通 int lang 撥號 prot 1.4 安裝 edit ply 簡介 這個東西,需要看簡介的就不要看下去了。 下面已剛刷進去,路由IP地址為192.168.1.1為例開始配置。 瀏覽器訪問192.168.1.1,無密碼。 一:配置上網 不管你是什麽方式上網,請根據自

阿裏雲ECS安裝配置elasticsearch

是否 ~~ ast span 然而 命令行 在外 一件事 elastics 在這裏只記錄一件事情:elasticsearch 安裝完成後,需要外網訪問9200端口測試是否成功,或者訪問kibana,都需要開放端口,然而貌似阿裏雲是不支持在服務器上直接用命令行來配置的,只能去

linux 系統安裝配置 zabbix服務(源碼安裝)

src root 拷貝 ip地址 快速定位 timeout fig dbn curl 簡介: zabbix是一個基於WEB界面的提供分布式系統監視以及網絡監視功能的企業級的開源解決方案。 zabbix能監視各種網絡參數,保證服務器系統的安全運營;並提供靈活的通

一:Greenplum5.10.2 生產環境安裝配置 (系統初始化、安裝準備)

添加 dead 有關 zlib 直接 dconf tables .rpm grub.conf 服務簡介: Greenplum Master Master只存儲系統元數據,業務數據全部分布在Segments上。其作為整個數據庫系統的入口,負責建立與客戶端的連接,SQL的解析並

Centons7下安裝配置Flume、Linux下安裝配置Flume、Flume的簡單使用示例、Flume整合Kafka使用

本篇文章主要介紹在windows下使用vmware虛擬機器中的Linux(Centons7)下配置安裝Flume。 目前Flume 的最新版本為1.8,筆者安裝的是1.6,是Flume的一個經典版本,通常在生產環境中使用的就是這個版本,在安裝Flume前,看先它的前置條件  (1)

Centons7下安裝配置Kafka、Linux下安裝配置Kafka

本篇文章主要介紹在windows下使用vmware虛擬機器中的Linux(Centons7)下配置安裝Kafka。 簡要步驟: ①、下載Kafka解壓包 ②、解壓Kafka ③、修改配置檔案 ④、啟動Kafka ⑤、建立topic   詳細步驟:

ubuntu/deepin下golang1.11.2安裝配置與beego、bee安裝

寫此文章的原因: ubuntu預設源使用apt安裝的golang版本預設為1.6,而beego框架則基於1.7; deepin預設源使用apt安裝的golang版本預設為1.8,但是安裝beego、bee則提示沒許可權,即便使用sudo雖然不提示沒許可權,但依然安裝失敗。 每次更換系統go環境要尋找

php的zookeeper擴充套件安裝及使用【備註】

大佬們已經寫得很詳細了,只是我自己按照安裝的時候,出了點問題,so 在此做個備註。最下方有大佬的連結。 ZooKeeper是一個分散式的,開放原始碼的分散式應用程式協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase的重要元件。它是一

windows下redis安裝php的redis擴充套件安裝

解壓後,得到一個redis的資料夾,開啟資料夾得到如下圖的一些檔案: 安裝包中是不提供redis.conf的,關於配置可以到網上搜索一下,或者從這裡直接下載:redis.conf (570) 下載後可以將redis.conf放到上圖所示位置! 用命令列,切換

Linux安裝配置Redis CentOS 7 下安裝Redis

Redis是一個高效能的,開源key-value型資料庫。是構建高效能,可擴充套件的Web應用的完美解決方案,可以記憶體儲存亦可持久化儲存。因為要使用跨程序,跨服務級別的資料快取,在對比多個方案後,決定使用Redis。順便整理下Redis的安裝過程,以便查閱。

【MyEclipse安裝配置教程】一、安裝JDK並配置環境變數

MyEclipse的安裝配置分為以下幾步: 一、安裝JDK並配置環境變數,也就是本文章。 二、用註冊碼破解MyEclipse: 【MyEclipse安裝配置教程】二、用註冊機程式碼破解MyEclipse - bing_bing_a的部落格 - 部落格頻道 - CSDN.NE

php的amqp擴充套件 安裝(windows) rabbitmq學習篇

http://pecl.php.net/package/amqp/1.4.0/windows關於amqp下載哪個版本需要根據自身php的版本來選擇,比如下載32位的還是64位的,包括選擇Thread Safe (TS)版本的還是NON Thread Safe(TS),不知道選

Centons7下安裝配置Sqoop、Linux下安裝配置Sqoop

本篇文章主要介紹在windows下使用vmware虛擬機器中的Linux(Centons7)下配置安裝Sqoop。 簡要步驟: ①、下載Sqoop解壓包 ②、解壓Sqoop ③、配置Sqoop ④、配置環境變數 ⑤、檢視是否安裝成功 ⑥、檢視資料庫及資料庫表 &nbs

php下amqp擴充套件安裝

下載地址:https://pan.baidu.com/s/1slxRLSh     https://pan.baidu.com/s/1geIoJPD   百度雲盤  cd/usr/local/  tar zxvf rabbitmq-c-0.4.1.tar.gz  c

php下pthreads擴充套件安裝

wget http://pecl.php.net/get/pthreads-2.0.7.tgz tar zxvf pthreads-2.0.7.tgz  cd pthreads-2.0.7 /srv/php-5.6.17/bin/phpize ./configure --

Linux下Eclipse安裝配置OpenCV2.4.8,用C++呼叫OpenCV及測試例項

首先從官網上下載安裝opencv,安裝教程可以從網上搜索一下,需要用到cmake。然後在Eclipse中配置opencv,目的在於讓其找到opencv的庫,就是g++ test.cpp -o test -I .........................-l.....

linux常用(一)linux 安裝配置 jdk 找不到安裝檔案目錄及source /etc/profile 報unexpected end of file 錯誤 解決

引言:  linux 安裝配置 jdk 應該算是一個很基本的東西。但是我到現在才自己第一次 正式安裝。果然出現了問題。。 問題就是 安裝之後 找不到 安裝路徑 ,進而沒法配置環境變數。 現象如下: 提示 already installed 之後  用find命令查