Sphinxは大量のデータの高速クエリーを実現する


Sphinxといえば、 mysql など、マスデータを検索するニーズについて、sphinxの基本概念、インストール、および大きなマスクエリーを動的言語に関連付けて実現する例を紹介します.
1.Sphinxの基本概念Sphinx一つ です.他のアプリケーションに高速、低スペース、高結果相関を提供することを意図している .Sphinx非常に容易にSQLデータベースとスクリプト言語を統合できます.現在システム内蔵MySQLおよびPostgreSQLデータベースデータソースのサポート.
つまり、sphinx.confファイルで上記のデータベースソースの構成を行うことができるとともに、Sphinx標準入力から特定のフォーマットのXMLデータを読み込むこともサポートされる.Sphinx効率よくインデックスを作成でき、速度は10 MB/Sに達し、協力できるCoreseek中国語の分詞に達する
2.インストール/使用
使用
①、PHP、javaなどのAPI関数やメソッドクエリなどのAPI呼び出しを使用する.利点はmysqlを再コンパイルする必要がなく、サービス側プロセスが「低結合」であり、プログラムが柔軟で便利に呼び出されることである.
この方法を紹介します
②、プラグイン方式(sphinxSE)でsphinxをmysqlプラグインにコンパイルし、特定のsql文で検索する.sql側で組み合わせが容易で、クライアントに直接データを返すことができるのが特徴です
この方式はORM方式のsqlにあまり友好的ではなく、mysql 5.1以上のバージョンが必要です.
インストール
本文はUbuntu 14.04を例にインストール方法を紹介する:依存:mysql、私の別のブログを参考にすることができます:インストール方法:ubantu 14の下でlampの再記録を構築します
インストールコード
wget http://www.sphinxsearch.com/downloads/sphinx-0.9.8-rc2.tar.gz 

tar -xvzf sphinx-0.9.8-rc2.tar.gz 
cd sphinx-0.9.8-rc2 
./configure --prefix=/usr/local/sphinx --with-mysql=/usr/local/mysql 
make 
make install

/*    */
$ cd /usr/local/sphinx/etc
$ cp sphinx.conf.dist sphinx.conf
$ vi sphinx.conf 

ここで、Sphinx簡単な例を示しますが、基本手順は、/sphinx/etc次のsphinx.conf.dist名前をsphinx.confに変更してから、sphinx.confその構成を変更し、コマンドは以下の通りです.
cd /usr/local/sphinx/etc #  sphinx       
cp sphinx.conf.dist sphinx.conf #  Sphinx    
Sphinx.confでサーバー上のmysqlのユーザー名、パスワード、使用するデータベースなどを設定できます.修正箇所はsphinx.confsource src1次の行です.
3.配置Sphinx.confSphinxデータベースのパラメータに従って構成する必要があり、先に見るmysql関連パラメータ
Mysql server:192.168.1.10

Mysql db :test

Mysql  :test.sphinx_article

mysql> desc sphinx_article;
+———–+———————+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+———–+———————+——+—–+———+—————-+
| id | int(11) unsigned | NO | PRI | NULL | auto_increment |
| title | varchar(255) | NO | | | |
| cat_id | tinyint(3) unsigned | NO | MUL | | |
| member_id | int(11) unsigned | NO | MUL | | |
| content | longtext | NO | | | |
| created | int(11) | NO | MUL | | |
+———–+———————+——+—–+———+—————-+
6 rows in set (0.00 sec)

以上の構成により、Sphinx.confでは、以下のような構成が可能となる.
#####     ###########
source article_src
{
type = mysql    #####     
sql_host = 192.168.1.10    ######mysql  
sql_user = root   ########mysql   
sql_pass = pwd############mysql  
sql_db = test #########mysql    
sql_port= 3306 ###########mysql  
sql_query_pre = SET NAMES UTF8 ###mysql    ,       ,                 GBK    UTF8
sql_query = SELECT id,title,cat_id,member_id,content,created FROM sphinx_article #######      sql

#####               ############

sql_attr_uint = cat_id ########        
sql_attr_uint = member_id
sql_attr_timestamp = created ############ UNIX     

sql_query_info = select * from sphinx_article where id=$id #########        (CLI)     

}

###    ###

index article
{
source = article_src ####     
path = /usr/local/sphinx/var/data/article #######               
docinfo = extern #####         
mlock = 0 ###        
morphology = none ####    (     )
min_word_len = 1 ####         
charset_type = utf-8 #####    

#####    ,  :       , sphinx          ,
#####       ,        ,            coreseek,sfc


#########       #####
indexer
{
mem_limit = 256M #######     
}

############ sphinx      ########
searchd
{
#listen = 9312 ###     ,      ,    IANA       9312  ,        3312

log = /usr/local/sphinx/var/log/searchd.log ####        ,  sphinx    ,              ,  (rotate)             
query_log = /usr/local/sphinx/var/log/query.log ###        ,   :            ,         
read_timeout = 5 ##     
max_children = 30 ###         searchd    
pid_file = /usr/local/sphinx/var/log/searchd.pid #######  ID  
max_matches = 1000 ###           
seamless_rotate = 1 ###         ,          
}


4.構成されたsphinxを使用してインデックスを作成する
ここではindex、コマンドを使用します.ここでは前のプロファイルを使用し、前の構成のパスの下に生成されます.
bin/indexer -c etc/sphinx.conf article ###          

5.クエリーsphinx作成したインデックスデータ
  • 使用search
  • 	 ######  article      “  ”    ########
    	 bin/search -c etc/sphinx.conf   
    

    ここでリモート接続を使用する場合は、utf 8符号化に文字を設定する必要があります.
  • 使用 ここではphpをapi言語として使用
  • 	###  sphinx     
    	bin/searchd -c etc/sphinx.conf & 
    
    	####
    	php    :
    	
    
    	require “sphinxapi.php”;
    	$cl = new SphinxClient();
    	$cl->SetServer(192.168.1.150, 9312); //       
    	#$cl->SetMatchMode(SPH_MATCH_EXTENDED); //       
    	//dump($cl);
    	$index=”article”;
    	$res = $cl->Query($keyword, $index);
    	$err = $cl->GetLastError();
    	dump($res);
    	function dump($var)
    	{
    		echo<pre>;
    		var_dump($var);
    		echo</pre>;
    	}
    	?>
    
    
    

    参考接続:Sphinx中国語ステーション