安装参考地址:http://briansnelson.com/How_to_install_Sphinx_on_Centos_Server
yum install sphinx
如果失败的话使用下面的方式安装
wget http://sphinxsearch.com/files/sphinx-2.2.9-1.rhel6.x86_64.rpm
yum localinstall sphinx-2.2.9-1.rhel6.x86_64.rpm
安装完了出现下面的内容
Sphinx installed!
Now create a full-text index, start the search daemon, and you're all set.
To manage indexes:
editor /etc/sphinx/sphinx.conf
To rebuild all disk indexes:
sudo -u sphinx indexer --all --rotate
To start/stop search daemon:
service searchd start/stop
To query search daemon using MySQL client:
mysql -h 0 -P 9306
mysql> SELECT * FROM test1 WHERE MATCH('test');
See the manual at /usr/share/doc/sphinx-2.0.9 for details.
For commercial support please contact Sphinx Technologies Inc at
http://sphinxsearch.com/contacts.html
Verifying : postgresql-libs-8.4.20-2.el6_6.x86_64 1/2
Verifying : sphinx-2.0.9-1.rhel6.x86_64 2/2
Installed:
sphinx.x86_64 0:2.0.9-1.rhel6
Dependency Installed:
postgresql-libs.x86_64 0:8.4.20-2.el6_6
Complete!
安装完了之后, 现在要创建一个全文索引, 并且开启搜索的守护进程, 然后要设置
启动服务
service searchd start
or
/etc/init.d/searchd start
设置开机自启动
chkconfig searchd on
chkconfig --list searchd
配置实例, 先新建一个mysql的数据表
blog.sphinx_article
CREATE TABLE `sphinx_article` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`title` varchar(255) NULL,
`cat_id` tinyint(3) UNSIGNED NULL,
`member_id` int(11) UNSIGNED NULL,
`content` longtext NULL,
`created` int(11) UNSIGNED NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
配置文件
vim /etc/sphinx/sphinx.conf
~~~
#
# Minimal Sphinx configuration sample (clean, simple, functional)
#
##索引源##
source article_src
{
type = mysql ##数据源类型
sql_host = rdsnnamnbnnamnbprivate.mysql.rds.aliyuncs.com ##mysql主机
sql_user = maxwelldu ##mysql 用户名
sql_pass = yu13jiu14 ##mysql密码
sql_db = blog ##mysql数据库名
sql_port = 3306 ##mysql端口
sql_query_pre = SET NAMES UTF8 ##mysql检索编码
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
sql_query_info = SELECT * FROM sphinx_article WHERE id=$id
}
##索引
index article
{
source = article_src ##声明索引源
path = /var/lib/sphinx/article ##索引文件存放路径及索引的文件名
docinfo = extern ##文档信息存储方式
mlock = 0 ##缓存数据内存锁定
morphology = none ##形态学(对中文无效)
min_word_len = 1 ##索引的词最小长度
charset_type = utf-8 ##数据编码
min_prefix_len = 0
min_infix_len = 1
ngram_len = 1
}
index testrt
{
type = rt
rt_mem_limit = 32M
path = /var/lib/sphinx/testrt
charset_type = utf-8
rt_field = title
rt_field = content
rt_attr_uint = gid
}
indexer
{
mem_limit = 128M
}
searchd
{
listen = 9312
listen = 9306:mysql41
log = /var/log/sphinx/searchd.log
query_log = /var/log/sphinx/query.log
read_timeout = 5
max_children = 30
pid_file = /var/run/sphinx/searchd.pid
max_matches = 1000
seamless_rotate = 1
preopen_indexes = 1
unlink_old = 1
workers = threads # for RT to work
binlog_path = /var/lib/sphinx/
}
~~~
建立索引文件
indexer -c /etc/sphinx/sphinx.conf article
在CLI上测试
search -c /etc/sphinx/sphinx.conf asdf
用php测试
<?php
$keyword = $_GET['keyword'];
$s = new SphinxClient;
$s->setServer("localhost", 9312);
$s->setMatchMode(SPH_MATCH_EXTENDED);
$s->setMaxQueryTime(3);
$result = $s->query($keyword, "article");
echo '<pre>';
print_r($result);
echo '</pre>';
?>
访问测试地址: http://123.56.135.230/sphinx.php?keyword=dfsa
如果还没有安装pshinx client 和 php扩展的话先安装扩展
参考地址: http://linux008.blog.51cto.com/2837805/622171
安装sphinx php扩展
cd /usr/local/src/
wget http://sphinxsearch.com/files/sphinx-2.2.9-release.tar.gz
tar zxf sphinx-2.2.9-release.tar.gz
cd sphinx-2.2.9-release/api/libsphinxclient/
安装sphinx扩展
cd /usr/local/src
wget http://sphinxsearch.com/files/sphinx-2.2.9-release.tar.gz
tar zxf sphinx-2.2.9-release.tar.gz
cd sphinx-2.2.9-release/api/libsphinxclient/
vim sphinxclient.c
./configure --prefix=/usr/local/sphinxclient
make
make install
cd /tmp/
wget http://pecl.php.net/get/sphinx-1.0.4.tgz
tar zxf sphinx-1.0.4.tgz
cd sphinx-1.0.4
/alidata/server/php/bin/phpize
./configure --with-php-config=/alidata/server/php/bin/php-config --with-sphinx=/usr/local/sphinxclient
make && make install
报错信息:
/tmp/sphinx-1.0.4/sphinx.c: In function ‘php_sphinx_client_read_property’:
/tmp/sphinx-1.0.4/sphinx.c:105: error: too few arguments to function ‘std_hnd->read_property’
/tmp/sphinx-1.0.4/sphinx.c: In function ‘zim_SphinxClient_setRankingMode’:
/tmp/sphinx-1.0.4/sphinx.c:767: error: too few arguments to function ‘sphinx_set_ranking_mode’
/tmp/sphinx-1.0.4/sphinx.c: In function ‘zm_startup_sphinx’:
/tmp/sphinx-1.0.4/sphinx.c:1786: warning: assignment from incompatible pointer type
make: *** [sphinx.lo] Error 1
报错解决方案参考地址: http://www.cnblogs.com/yun007/p/3802363.html
retval = std_hnd->read_property(object, member, type TSRMLS_CC);
将这个函数最后添加一个参数NULL
retval = std_hnd->read_property(object, member, type TSRMLS_CC, NULL);
res = sphinx_set_ranking_mode(c->sphinx, (int)ranker);
最后加一个参数NULL
res = sphinx_set_ranking_mode(c->sphinx, (int)ranker, NULL);
make && make install
扩展安装好了之后修改php.ini, 然后重启php-fpm即可
vim /alidata/server/php/etc/php.ini
最后添加一行
extension=sphinx.so
重启
/etc/init.d/php-fpm restart
测试
http://123.56.135.230/sphinx.php?keyword=dfsa
到现在为止还不能搜索中文, 参考地址: http://www.cnblogs.com/gaoxu387/archive/2012/12/05/2803183.html
cd /tmp
wget http://www.coreseek.cn/uploads/csft/3.2/coreseek-3.2.14.tar.gz
tar zxf coreseek-3.2.14.tar.gz
cd coreseek-3.2.14
安装mmseg中文分词
cd mmseg-3.2.14
./bootstrap #输出的warning信息可以忽略,如果出现error则需要解决
./configure --prefix=/usr/local/mmseg3
make && make install
cd ..
##安装coreseek
cd csft-3.2.14
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数据源安装说明
make ## 报错, 错误参考地址: http://blog.csdn.net/carzyer/article/details/6566351
vim src/MakeFile
LIBS = -lodbc -lm -lz -lexpat -L/usr/local/lib -lrt -lpthread
修改为
LIBS = -lodbc -lm -lz -lexpat -liconv -L/usr/local/lib -lrt -lpthread
make install
cd ..
配置mysql数据源
cd /usr/local/coreseek
cp /etc/sphinx/sphinx.conf etc/csft.conf
vim /etc/csft.conf
~~~
#
# Minimal Sphinx configuration sample (clean, simple, functional)
#
##索引源##
source article_src
{
type = mysql ##数据源类型
sql_host = rdsnnamnbnnamnbprivate.mysql.rds.aliyuncs.com ##mysql主机
sql_user = maxwelldu ##mysql 用户名
sql_pass = yu13jiu14 ##mysql密码
sql_db = blog ##mysql数据库名
sql_port = 3306 ##mysql端口
sql_query_pre = SET NAMES UTF8 ##mysql检索编码
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
sql_query_info = SELECT * FROM sphinx_article WHERE id=$id
sql_query_info_pre = SET NAMES utf8
}
##索引
index article
{
source = article_src ##声明索引源
path = /usr/local/coreseek/var/data/article ##索引文件存放路径及索引的文件名
docinfo = extern ##文档信息存储方式
mlock = 0 ##缓存数据内存锁定
morphology = none ##形态学(对中文无效)
min_word_len = 1 ##索引的词最小长度
charset_type = zh_cn.utf-8 ##数据编码
charset_dictpath = /usr/local/mmseg3/etc/
}
indexer
{
mem_limit = 128M
}
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_article.pid
log = /usr/local/coreseek/var/log/searchd_article.log
query_log = /usr/local/coreseek/var/log/query_article.log
}
~~~
创建索引和测试全文检索
测试indexer索引
/usr/local/coreseek/bin/indexer -c etc/csft.conf
测试sphinx索引文件
/usr/local/coreseek/bin/indexer -c etc/csft.conf —all
使用search程序测试全文检索(注意是search不是search)
/usr/local/coreseek/bin/search -c etc/csft.conf -a asdf北京
停止sphinx的searchd服务, 开启coreseek的searchd服务
service searchd stop
关闭sphinx的自启动服务
chkconfig searchd off
开启coreseek的自启动服务
echo "/usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/csft.conf" >> /etc/rc.d/rc.local
使用PHP API调用coreseek
复制api/sphinxapi.php到项目中, 然后写测试程序, (需要先将sphinx的php扩展关闭, 修改php.ini, 将sphinx.so注释, 然后重启php-fpm)
现在实现了中文检索, 但是有新的数据还不能够检索到, 下面就开始增量索引实践, 参考地址: http://blog.csdn.net/kongdeqian1988/article/details/38303343
先建立一张增量索引记录表pre_coreseek(id,maxid)
CREATE TABLE `pre_coreseek` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`maxid` int(11) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
修改配置
vim /usr/local/coreseek/etc/csft.conf
~~~
#
# Minimal Sphinx configuration sample (clean, simple, functional)
#
##索引源##
source article_src
{
type = mysql ##数据源类型
sql_host = rdsnnamnbnnamnbprivate.mysql.rds.aliyuncs.com ##mysql主机
sql_user = maxwelldu ##mysql 用户名
sql_pass = yu13jiu14 ##mysql密码
sql_db = blog ##mysql数据库名
sql_port = 3306 ##mysql端口
sql_query_pre = SET NAMES UTF8 ##mysql检索编码
sql_query_pre = REPLACE INTO pre_coreseek SELECT 1,MAX(id) from sphinx_article
sql_query = SELECT id, title, cat_id, member_id, content, created FROM sphinx_article WHERE id < (SELECT maxid FROM pre_coreseek WHERE id=1) ##获取数据的sql
##过滤或条件查询的属性##
sql_attr_uint = cat_id
sql_attr_uint = member_id
sql_attr_timestamp = created
sql_query_info = SELECT * FROM sphinx_article WHERE id=$id
sql_query_info_pre = SET NAMES utf8
}
source increment : article_src
{
sql_query_pre = SET NAMES utf8
sql_query = SELECT id, title, cat_id, member_id, content, created FROM sphinx_article WHERE id > (SELECT maxid FROM pre_coreseek WHERE id=1) ##获取数据的sql
}
##索引
index article
{
source = article_src ##声明索引源
path = /usr/local/coreseek/var/data/article ##索引文件存放路径及索引的文件名
docinfo = extern ##文档信息存储方式
mlock = 0 ##缓存数据内存锁定
morphology = none ##形态学(对中文无效)
min_word_len = 1 ##索引的词最小长度
charset_type = zh_cn.utf-8 ##数据编码
charset_dictpath = /usr/local/mmseg3/etc/
}
index increment : article
{
source = increment
path = /usr/local/coreseek/var/data/increment
}
indexer
{
mem_limit = 128M
}
indexer
{
mem_limit = 128M
}
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_article.pid
log = /usr/local/coreseek/var/log/searchd_article.log
query_log = /usr/local/coreseek/var/log/query_article.log
}
~~~
停止searchd服务
/usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/csft.conf --stop
第一次启动建立全索引
/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf --all
启动searchd 后台模式,启动前一定先建立好全索引,不然启动失败或增量索引部分会索引不到
/usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/csft.conf ###启动
添加一些数据 , 尝试检索, 发现索引不到
增量索引
/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf increment --rotate
合并索引
/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf --merge article increment --merge-dst-range deleted 0 0 --rotate
到现在为止可以检索到了
可以写个定时cron每隔30分钟作一次增量索引
可以写个定时cron每隔1天作一次全索引以确定保持数据的一致性
做实验的时候每隔一分钟做一次增量索引
*/1 * * * * /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf increment --rotate
*/1 * * * * /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf --merge article increment --merge-dst-range deleted 0 0 —rotate
每天做一次全索引, 确保数据的一致性
* * */1 * * /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf --all
相关推荐
这些文档和博客文章提供了详细的教程和实践案例,有助于深入理解和应用Sphinx-4。此外,CSDN社区等开发者论坛也是寻求帮助和交流经验的好去处。 总之,Sphinx-4为Java开发者提供了一种强大的语音识别解决方案,虽然...
7. **实践应用**: 在实际项目中,Java整合Sphinx可用于电商网站的商品搜索、论坛的帖子搜索、新闻网站的内容搜索等多种场景。通过Sphinx的全文检索和高级查询功能,可以提高用户的搜索体验,同时减少服务器负载。 ...
**Pocketsphinx语音库详解** Pocketsphinx是CMU Sphinx项目的一部分,由卡内基梅隆大学(Carnegie ...通过以上内容,读者不仅可以了解Pocketsphinx的基本原理,还能掌握如何在实践中运用这个强大的语音识别工具。
《探索pocketsphinx-android-demo:语音识别在Android平台的应用》 在移动设备上,语音识别技术已经成为人机交互的重要...通过深入研究和实践,我们可以掌握Pocketsphinx的使用,并将其应用于各种创新的移动应用中。
**正文** 本文将详细介绍pocketsphinx以及其在中文语音识别中的应用。...通过理解声学模型和语言模型的概念,以及如何在实践中使用它们,我们可以在各种应用场景中利用这些工具进行有效的语音交互设计。
51CTO技术沙龙第19期讲义:Sphinx 全文检索实践指南主讲:李沫南部分主要内容:全文检索 VS 数据库检索SELECT * FROM documents WHERE title like '%test%'CPU 100%'30秒内只能进行一次查询'没有找到记录......
Sphinx是一款开源的全文搜索引擎,它为开发者提供了一个高效、可扩展且易用的解决方案,用于构建自定义的全文检索功能。在中文环境下,Sphinx可能面临...在实践中,不断优化和调整配置参数,可以进一步提升用户体验。
**Sphinx+MySQL安装手册** ...通过学习和实践,你可以构建出一个稳定、高效的全文搜索引擎系统,满足大规模数据的检索需求。在实际操作过程中,应根据具体业务场景和硬件环境进行适当的调整和优化。
Sphinx4是一个强大的开源语音识别框架,主要由Java语言编写,提供了一...总的来说,sphinx4-5prealpha-src.zip为开发者提供了一个探索语音识别技术的平台,通过深入理解和实践,可以构建出满足特定需求的语音识别应用。
在Linux环境中,构建一个基于PHP和Sphinx的搜索系统是一个高效且强大的解决方案,尤其适用于大数据量的全文检索。...记住,实践是最好的老师,通过不断的调试和优化,你可以实现更复杂、更高效的搜索功能。
《深入理解Pocketsphinx:基于lm与dic文件的语音识别》 Pocketsphinx是一个轻量级的开源语音识别引擎,广泛应用于嵌入式系统...在实践过程中,不断地优化和调整这些模型文件,是提升Pocketsphinx识别效果的关键步骤。
《PHP搜索Sphinx:深入解析与实践》 一、引言 Sphinx是一个高性能的全文检索引擎,由Andrew Aksyonoff开发,并以其强大的搜索功能和广泛的适用性在IT行业中享有盛誉。本文将深入探讨Sphinx的工作原理,以及如何...
Sphinx 是一个开源全文搜索引擎,它为开发者提供了一个强大的、可扩展的、易于集成到应用程序中的搜索解决方案。Sphinx 的设计目标是...通过阅读给定的博客文章和实践操作,你可以逐步了解并精通 Sphinx 的各项功能。
Sphinx以其高效、灵活和可扩展性著称,广泛应用于网站、数据库和各类信息系统中。 1. **Sphinx安装**: 安装Sphinx通常涉及下载源代码,编译并安装。首先,你需要访问Sphinx的官方网站获取最新版本的源代码。然后...
在“sphinx 测试可用 改下数据库”这个标题中,我们可以推测这可能是一个关于如何测试并配置 Sphinx 以适应特定数据库的实践过程。 首先,我们要理解Sphinx的基本工作原理。Sphinx通过建立倒排索引来实现高效的全文...
Sphinx-4的设计不仅汲取了过往系统设计中的最佳实践模式,还考虑到了当前研究人员感兴趣的新兴领域的需求。 #### 设计理念与目标 Sphinx-4的设计理念是灵活性和模块化。这意味着它能够支持各种不同的语音识别方法...
总的来说,Django 1.4.3的文档和Sphinx的结合,不仅为开发者提供了一份详尽的学习资料,也展示了高效文档生成的最佳实践。无论你是正在学习Django的新手,还是已经在项目中积累了经验的老手,都应该充分利用这些资源...
7. **最佳实践**: - **保持文档结构清晰**:按照模块、类和函数组织文档结构。 - **编写清晰的文档字符串**:在代码中添加详细的文档字符串,方便 `autodoc` 扩展使用。 - **定期更新文档**:确保文档与代码同步...
理解和实践状态机模式对于游戏设计非常重要。 6. **多线程**:为了提高游戏性能,Asphyre Sphinx可能支持多线程编程,使某些计算任务能够在后台运行,不影响主游戏循环。 7. **网络编程**:如果游戏涉及到多人在线...
本项目利用开源的PocketSphinx库实现了一个离线语音识别系统,其在小范围语音识别上达到了99%的高准确率,这对于毕业设计和学习Android开发的学生来说是一个很好的实践案例。 PocketSphinx是一个轻量级的语音识别...