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から最新のコードをダウンロードして、コンパイルインストール:
Tags:on demand index、real-time index、sphinx、リアルタイムインデックス
参考文章: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 index、real-time index、sphinx、リアルタイムインデックス