+------------------------------------+
1.创建配置文件:
+------------------------------------+
cd /usr/local/webserver/sphinx/coreseek/etc
vi sphinx.conf
+------------------------------------+
2.输入以下内容:
+------------------------------------+
source test_doc_source
{
type = mysql
sql_host = localhost
sql_user = root
sql_pass = 123456
sql_db = test
sql_port = 3306 # optional, default is 3306
sql_sock = /tmp/mysql.sock
sql_query_pre = SET NAMES utf8
sql_query = \
SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content \
FROM documents
sql_attr_uint = group_id
sql_attr_timestamp = date_added
sql_query_info = SELECT * FROM documents WHERE id=$id
}
index test_doc_index
{
source = test_doc_source
path = /usr/local/webserver/sphinx/coreseek/var/data/test_doc_index
docinfo = extern
charset_type = zh_cn.utf-8
mlock = 0
morphology = none
min_word_len = 1
html_strip = 0
charset_dictpath = /usr/local/webserver/sphinx/mmseg3/etc/
ngram_len = 0
}
indexer
{
mem_limit = 32M
}
searchd
{
port = 9312
log = /usr/local/webserver/sphinx/coreseek/var/log/searchd.log
query_log = /usr/local/webserver/sphinx/coreseek/var/log/query.log
read_timeout = 5
max_children = 30
pid_file = /usr/local/webserver/sphinx/coreseek/var/log/searchd.pid
max_matches = 1000
seamless_rotate = 1
preopen_indexes = 0
unlink_old = 1
}
+------------------------------------+
3.向test数据库中创建测试表:
+------------------------------------+
DROP TABLE IF EXISTS test.documents;
CREATE TABLE `documents` (
`id` int(10) NOT NULL auto_increment,
`group_id` int(10) NOT NULL,
`group_id2` int(10) NOT NULL,
`date_added` datetime NOT NULL,
`title` varchar(255) NOT NULL,
`content` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
REPLACE INTO test.documents ( id, group_id, group_id2, date_added, title, content ) VALUES
( 1, 1, 5, NOW(), 'test one', 'this is my test document number one. also checking search within phrases.' ),
( 2, 1, 6, NOW(), 'test two', 'this is my test document number two' ),
( 3, 2, 7, NOW(), 'another doc', 'this is another group' ),
( 4, 2, 8, NOW(), 'doc number four', 'this is to test groups' );
DROP TABLE IF EXISTS test.tags;
CREATE TABLE `tags` (
`docid` int(11) NOT NULL,
`tagid` int(11) NOT NULL,
UNIQUE KEY `docid` (`docid`,`tagid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO test.tags VALUES
(1,1), (1,3), (1,5), (1,7),
(2,6), (2,4), (2,2),
(3,15),
(4,7), (4,40);
+------------------------------------+
3.创建索引:
+------------------------------------+
/usr/local/webserver/sphinx/coreseek/bin/indexer -c /usr/local/webserver/sphinx/coreseek/etc/sphinx.conf --all
# --all 表示创建所有的索引,也可以是具体索引的名词
/usr/local/webserver/sphinx/coreseek/bin/indexer -c /usr/local/webserver/sphinx/coreseek/etc/sphinx.conf test_doc_index
#索引文件存放位置
/usr/local/webserver/sphinx/coreseek/var/data
+------------------------------------+
4.测试:
+------------------------------------+
/usr/local/webserver/sphinx/coreseek/bin/search -c /usr/local/webserver/sphinx/coreseek/etc/sphinx.conf number
+------------------------------------+
5.过滤查询:
+------------------------------------+
/usr/local/webserver/sphinx/coreseek/bin/search -c /usr/local/webserver/sphinx/coreseek/etc/sphinx.conf number --filter group_id 2
+------------------------------------+
5.测试中文:
+------------------------------------+
INSERT INTO `test`.`documents` (`id`, `group_id`, `group_id2`, `date_added`, `title`, `content`) VALUES
(NULL, '2', '3', '2011-02-01 00:37:12', '研究生的故事', '研究生自主创业'),
(NULL, '1', '1', '2011-01-28 00:38:22', '研究', '为了创业而研究生命科学');
#更新索引
/usr/local/webserver/sphinx/coreseek/bin/indexer -c /usr/local/webserver/sphinx/coreseek/etc/sphinx.conf test_doc_index
#查询
/usr/local/webserver/sphinx/coreseek/bin/search -c /usr/local/webserver/sphinx/coreseek/etc/sphinx.conf 研究
#如果用PHP代码访问Sphinx,需要先启动守护进程
/usr/local/webserver/sphinx/coreseek/bin/searchd -c /usr/local/webserver/sphinx/coreseek/etc/sphinx.conf
#创建SPHINX引擎表
CREATE TABLE sph_document1
(
id INTEGER UNSIGNED NOT NULL,
weight INTEGER NOT NULL,
query VARCHAR(3072) NOT NULL,
group_id INTEGER,
INDEX(query)
) ENGINE=SPHINX CONNECTION="sphinx://192.168.1.100:9312/test_doc_index";
CREATE TABLE `documents` (
`id` int(10) NOT NULL auto_increment,
`group_id` int(10) NOT NULL,
`group_id2` int(10) NOT NULL,
`date_added` datetime NOT NULL,
`title` varchar(255) NOT NULL,
`content` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
SELECT doc.id, doc.title, doc.content FROM sph_document1 AS sph JOIN documents AS doc ON sph.id = doc.id AND sph.query = 'number';