Sphinxを利用してリアルタイム全文検索を実現する.

13145 ワード

Sphinx 0.9.9および以前のバージョンは、生のままではリアルタイムインデックスをサポートしていません.一般的には、主インデックス+増分インデックスの方式で「準リアルタイム」インデックスを実現します.最新の1.10.1(trunkでは未発表)は、real-time indexをサポートしています.SVNのドキュメントを見ると、Sphinxを利用して必要な索引(on demand index)の全文検索システムを構築しやすいです.
参考文章:http://filiptepper.com/2010/05/27/real-time-indexing-and-searching-with-sphinx-1-10-1-dev.html
まず、sphinxsearchのSVNから最新のコードをダウンロードして、コンパイルインストール:
svn
 checkout http://
sphinxsearch.googlecode.com/
svn/
trunk sphinx
cd
 sphinx/

./
configure --prefix
=/
path/
to/
sphinx
make

make
 install
コンパイルが大丈夫なら、sphinxのインストールディレクトリの下のetcで、sphinx.comの配置ファイルを作ります.中国語のコードを指定してください.そうしないと、中国語で問題があります.
index rt {
    #        real-time index
    type = rt
    #   utf-8  
    charset_type  = utf-8
    #   utf-8    
    charset_table  = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
    #     
    ngram_len = 1
    #        
    ngram_chars   = U+3000..U+2FA1F
    #         
    path = /path/to/sphinx/data/rt
    #    
    rt_field = message
    #     
    rt_attr_uint = message_id
}
 
searchd {
    log = /path/to/sphinx/log/searchd.log
    query_log = /path/to/sphinx/log/query.log
    pid_file = /path/to/sphinx/log/searchd.pid
    workers = threads
    # sphinx  mysql  ,      mysql,mysql41    mysql4.1~mysql5.1  
    listen = 127.0.0.1:9527:mysql41
}
sphinxサービスを開始します.
/
path/
to/
sphinx/
bin/
searchd --config
 /
path/
to/
sphinx/
etc/
sphinx.conf
いくつかのデータを挿入してみます.
ubuntu:chaoqun ~
:mysql -
h127.0.0.1 -
P9527
Welcome to
 the MySQL monitor.  Commands end
 with
 ;
 or
 \g.
Your MySQL connection
 id is
 1

Server version
: 1.10.1-
dev (
r2351)

 
Type
 'help;'
 or
 '\h
'
 for help
. Type
 '\c
'
 to
 clear the current input statement.
 
mysql>
 INSERT
 INTO
 rt VALUES
 (
1
,
 'this message has a body'
,
 1
)
;

Query OK,
 1
 row affected (
0.01
 sec)

 
mysql>
 INSERT
 INTO
 rt VALUES
 (
2
,
 '    OK'
,
 2
)
;

Query OK,
 1
 row affected (
0.00
 sec)

 
mysql>
テスト全文検索:
mysql>
 SELECT
 *
 FROM
 rt WHERE
 MATCH
(
'message'
)
;

+------+--------+------------+

|
 id   |
 weight |
 message_id |

+------+--------+------------+

|
    1
 |
   1643
 |
          1
 |

+------+--------+------------+

1
 row in
 set
 (
0.00
 sec)

 
mysql>
 SELECT
 *
 FROM
 rt WHERE
 MATCH
(
'OK'
)
;

+------+--------+------------+

|
 id   |
 weight |
 message_id |

+------+--------+------------+

|
    2
 |
   1643
 |
          2
 |

+------+--------+------------+

1
 row in
 set
 (
0.01
 sec)

 
mysql>
 SELECT
 *
 FROM
 rt WHERE
 MATCH
(
' '
)
;

+------+--------+------------+

|
 id   |
 weight |
 message_id |

+------+--------+------------+

|
    2
 |
   1643
 |
          2
 |

+------+--------+------------+

1
 row in
 set
 (
0.00
 sec)

 
mysql>
 SELECT
 *
 FROM
 rt WHERE
 MATCH
(
' '
)
;

Empty set
 (
0.00
 sec)

 
mysql>
簡単で便利です.
Tags:on demand indexreal-time indexsphinxリアルタイムインデックス