- 浏览: 1017680 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (826)
- 硬件 (8)
- 软件 (24)
- 软件工程 (34)
- JAVA (229)
- C/C++/C# (77)
- JavaScript (8)
- PHP (1)
- Ruby (3)
- MySQL (14)
- 数据库 (19)
- 心情记事 (12)
- 团队管理 (19)
- Hadoop (1)
- spring (22)
- mybatis(ibatis) (7)
- tomcat (16)
- velocity (0)
- 系统架构 (6)
- JMX (8)
- proxool (1)
- 开发工具 (16)
- python (10)
- JVM (27)
- servlet (5)
- JMS (26)
- ant (2)
- 设计模式 (5)
- 智力题 (2)
- 面试题收集 (1)
- 孙子兵法 (16)
- 测试 (1)
- 数据结构 (7)
- 算法 (22)
- Android (11)
- 汽车驾驶 (1)
- lucene (1)
- memcache (12)
- 技术架构 (7)
- OTP-Erlang (7)
- memcached (17)
- redis (20)
- 浏览器插件 (3)
- sqlite (3)
- Heritrix (9)
- Java线程 (1)
- scala (0)
- Mina (6)
- 汇编 (2)
- Netty (15)
- libevent (0)
- CentOS (12)
- mongod (5)
- mac os (0)
最新评论
-
kingasdfg:
你这里面存在一个错误添加多个任务 应该是这样的 /** * ...
Quartz的任务的临时启动和暂停和恢复【转】 -
kyzeng:
纠正一个错误,long型对应的符号是J,不是L。
Jni中C++和Java的参数传递 -
zhaohaolin:
抱歉,兄弟,只是留下作记录,方便学习,如果觉得资料不好,可以到 ...
netty的个人使用心得【转】 -
cccoooccooco:
谢谢!自己一直以为虚机得使用网线才可以与主机连接呢。。
主机网卡无网线连接与虚拟机通信 -
yuqilin001:
要转别人的东西,请转清楚点嘛,少了这么多类,误人子弟
netty的个人使用心得【转】
2011-02-19 21:50:11 | 分类: sphinx | 字号 订阅
这几天项目中需要重新做一个关于商品的全文搜索功能,于是想到了用Sphinx,因为需要中文分词,所以选择了Sphinx
for
chinese,当然你也可以选择coreseek,建议这两个中选择一个,暂时不要选择原版Sphinx(对中文的支持不是很好).又因为服务器所用
MySQL在当时编译时并没有编译Sphinx扩展,而重新编译MySQL并加入Sphinx暂时又无法实现(项目用到了多台服务器,在不影响现有业务的
情况下不可能去重新编译MySQL的),所以采用的是程序通过API来外部调用Sphinx.Sphinx自带的API有
PHP,Python,Ruby,Java等众多版本,所以基本也够用了,本人使用的编程语言是PHP所以下文的条用示例采用的是PHP版的API.
一.安装及配置Sphinx及准备测试数据
1.安装前的准备工作
(1)请确认安装了MySQL,Gcc及常用的开发环境包
(2)下载sphinx-for-chinese-1.10.1及中文分词词典xdict_1.1(下面两个方式,选一个即可)
[1]到sphinx-for-chinese官方下载(强烈推荐使用这个)
wget -c http://sphinx-for-chinese.googlecode.com/files/sphinx-for-chinese-1.10.1-dev-r2287.tar.gz
wget -c http://sphinx-for-chinese.googlecode.com/files/xdict_1.1.tar.gz
[2]到本站下载(国外vps,性能不怎么好,而且速度慢,不推荐,只做备用)
wget -c http://b332.com/source/soft/sphinx-for-chinese-1.10.1/sphinx-for-chinese-1.10.1-dev-r2287.tar.gz
wget -c http://b332.com/source/soft/sphinx-for-chinese-1.10.1/xdict_1.1.tar.gz
2.安装sphinx-for-chinese-1.10.1
tar zxvf sphinx-for-chinese-1.10.1-dev-r2287.tar.gz
cd sphinx-for-chinese-1.10.1-dev-r2287
#MySQL安装在默认位置的使用如下命令
./configure --prefix=/usr/local/sphinx-for-chinese-1.10.1 --with-mysql
如果出现如下图所示错误,表明MySQL不是安装在默认位置,请执行下面的命令
#
如果MySQL不是安装在默认位置(特别是自己编译MySQL的,请注意),请指定MySQL的相关位置,主要是MySQL的include和lib目录
(Sphinx编译的时候要用到里面的.h头文件),--with-mysql-includes及--with-mysql-libs就是为了指定这两
个位置的
显示如下图所示内容时,表示可以接着执行下面的make及make install命令
make install
#最后执行命令
ls /usr/local/sphinx-for-chinese-1.10.1/
如果显示bin,etc和var三个目录表示安装成功
3.让Sphinx支持中文分词
tar zxvf xdict_1.1.tar.gz
/usr/local/sphinx-for-chinese-1.10.1/bin/mkdict xdict_1.1.txt xdict_1.1
如 果提示bin/mkdict: error while loading shared libraries: libmysqlclient.so.16等错误(以下命令中的libmysqlclient.so.16.0.0的位置取决于我们mysql编译安装的 位置)
再次执行
#提示Chinese dictionary was successfully created!表示中文分词词典生成成功
cp xdict_1.1 /usr/local/sphinx-for-chinese-1.10.1/etc/xdict_1.1
4.配置Sphinx
输入以下内容
# sphinx基本配置
# 索引源
source goods_src
{
# 数据库类型
type = mysql
# MySQL主机IP
sql_host = localhost
# MySQL用户名
sql_user = sphinxuser
# MySQL密码
sql_pass = sphinxpass
# MySQL数据库
sql_db = sphinx
# MySQL端口(如果防火墙有限制,请开启)
sql_port= 3306
# MySQL sock文件设置(默认为/tmp/mysql.sock,如果不一样,请指定)
sql_sock = /tmp/mysql.sock
# MySQL检索编码(数据库非utf8的很可能检索不到)
sql_query_pre = SET NAMES UTF8
# 获取数据的SQL语句
sql_query = SELECT goods_id,goods_id AS
goods_id_new,goods_name,goods_color,goods_name AS
goods_name_search,goods_color AS goods_color_search From goods_test
# 以下是用来过滤或条件查询的属性(以下字段显示在查询结果中,不在下面的字段就是搜索时要搜索的字段,如SQL语句中的goods_color_search,goods_name_search)
# 无符号整型
#goods_id为主键,如果加在这里在生成索引的时候会报attribute 'goods_id' not found,这里用goods_id_new来变通
sql_attr_uint = goods_id_new
# 字符串类型
sql_attr_string = goods_name
sql_attr_string = goods_color
# 用于命令界面端(CLI)调用的测试(一般来说不需要)
#sql_query_info = SELECT * FROM goods_test Where goods_id = $goods_id;
}
# 索引
index goods
{
# 索引源声明
source = goods_src
# 索引文件的存放位置
path = /usr/local/sphinx-for-chinese-1.10.1/var/data/goods
# 文件存储模式(默认为extern)
docinfo = extern
# 缓存数据内存锁定
mlock = 0
# 马氏形态学(对中文无效)
morphology = none
# 索引词最小长度
min_word_len = 1
# 数据编码(设置成utf8才能索引中文)
charset_type = utf-8
# 中文分词词典
chinese_dictionary = /usr/local/sphinx-for-chinese-1.10.1/etc/xdict_1.1
# 最小索引前缀长度
min_prefix_len = 0
# 最小索引中缀长度
min_infix_len = 1
# 对于非字母型数据的长度切割(for CJK indexing)
ngram_len = 1
# 对否对去除用户输入查询内容的html标签
html_strip = 0
}
# 索引器设置
indexer
{
# 内存大小限制 默认是 32M, 最大 2047M, 推荐为 256M 到 1024M之间
mem_limit = 256M
}
# sphinx服务进程search的相关配置
searchd
{
# 监测端口及形式,一下几种均可,默认为本机9312端口
# listen = 127.0.0.1
# listen = 192.168.0.1:9312
# listen = 9312
# listen = /var/run/searchd.sock
# search进程的日志路径
log = /usr/local/sphinx-for-chinese-1.10.1/var/log/searchd.log
# 查询日志地址
query_log = /usr/local/sphinx-for-chinese-1.10.1/var/log/query.log
# 读取超时时间
read_timeout = 5
# 请求超时市时间
client_timeout = 300
# searche进程的最大运行数
max_children = 30
# 进程ID文件
pid_file = /usr/local/sphinx-for-chinese-1.10.1/var/log/searchd.pid
# 最大的查询结果返回数
max_matches = 1000
# 是否支持无缝切换(做增量索引时需要)
seamless_rotate = 1
# 在启动运行时是否提前加载所有索引文件
preopen_indexes = 0
# 是否释放旧的索引文件
unlink_old = 1
# MVA跟新池大小(默认为1M)
mva_updates_pool = 1M
# 最大允许的网络包大小(默认8M)
max_packet_size = 8M
# 每个查询最大允许的过滤器数量(默认256)
max_filters = 256
#每个过滤器最大允许的值的个数(默认4096)
max_filter_values = 4096
# 每个组的最大查询数(默认为32)
max_batch_queries = 32
}
# Sphinx配置文件结束
中文在linux下可能会看到乱码,不用管
5.创建测试数据库并添加测试内容(请先连上自己的MySQL数据库),在MySQL中执行如下命令
mysql> grant all privileges on sphinx.* to 'sphinxuser'@'%' identified by 'sphinxpass';
mysql> grant all privileges on sphinx.* to 'sphinxuser'@'localhost' identified by 'sphinxpass';
mysql> use sphinx;
mysql> CREATE TABLE IF NOT EXISTS `goods_test` (\
`goods_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '商品id',\
`goods_name` varchar(255) NOT NULL COMMENT '商品名称',\
`goods_color` varchar(60) NOT NULL COMMENT '商品颜色',\
PRIMARY KEY (`goods_id`)\
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='商品表,sphinx示例' AUTO_INCREMENT=11 ;\
mysql> INSERT INTO `goods_test` (`goods_id`, `goods_name`, `goods_color`) VALUES\
(1, '热卖时尚双肩背包', '黑色'),\
(2, '热卖时尚电脑双肩背包', '灰色'),\
(3, '缤纷炫动时尚化妆包', '黑色'),\
(4, '缤纷炫动时尚化妆包', '蓝色'),\
(5, '缤纷炫动时尚化妆包', '粉红'),\
(6, '极致性感 女款衬衫', '黑色'),\
(7, '个性宣言 男款短袖衬衫', '蓝色'),\
(8, '个性宣言 男款短袖衬衫', '红色'),\
(9, '个性宣言 男款短袖衬衫', '绿色'),\
(10, '个性宣言 男款短袖衬衫', '黑色');\
好了,万事俱备了,可以开始实战操作Sphinx了
二.实战操作Sphinx
1.建立索引(如果配置文件有改动,应该重新生成索引文件,如果下面第3点中的searchd进程已经开启的话,应先关闭)
/usr/local/sphinx-for-chinese-1.10.1/bin/indexer -c /usr/local/sphinx-for-chinese-1.10.1/etc/sphinx.conf goods
#如果配置文件里有多个索引,需要一次生成使用--all参数
/usr/local/sphinx-for-chinese-1.10.1/bin/indexer -c /usr/local/sphinx-for-chinese-1.10.1/etc/sphinx.conf --all
2.在linux命令行下测试搜索
搜索结果如下图示
3.开启守护进程(供API调用,如果配置文件改动,应重新启动这个进程,不然搜到的数据不是最新)
# 防火墙需要开放9312端口供外部访问9312端口(3306是MySQL的端口)
/sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 9312 -j ACCEPT
/etc/rc.d/init.d/iptables save
三.外部API调用(PHP版)
注意使用时前提是执行了如下命令,而且防火墙也开启了9312端口
1.
把/usr/local/src/sphinx-for-chinese-1.10.1-dev-r2287/api/sphinxapi.php弄出
来,和下面第2点中的search.php放在同级目录(这个只是示例,放在哪里都可以,包含的时候找到正确的sphinxapi.php的位置即可)
2.编辑search.php文件,内容如下(具体内容请读者自己定,我这里只是示例)
<?php
header('Content-Type: text/html;charset="UTF-8"');
if ($_GET) {
// 关键词
$keyword = urldecode(trim(strip_tags($_GET['keyword'])));
if ($keyword) {
// 包含Sphinx的api文件
require_once 'sphinxapi.php';
// sphinx服务器地址
$server = '192.168.128.130';
// 端口
$port = 9312;
// 索引名 为*时表示搜索所有索引
$indexName = 'goods';
// 分页页码
$page = intval($_GET['page']) > 1 ? intval($_GET['page']) : 1;
// 每页显示的数量
$pageSize = 30;
$sphinx = new SphinxClient();
// 建立连接
$sphinx->SetServer($server, $port);
// 连接超时时间(非常必要,比如sphinx服务器挂了等异常情况) 单位为s,秒
$sphinx->SetConnectTimeout(3);
// 最大查询时间 单位为ms,毫秒
$sphinx->SetMaxQueryTime(2000);
// 按分页取结果
$sphinx->SetLimits(($page-1)*$pageSize, $pageSize); //第一个参数为offset,第二个参数为limit
// 模式
// $sphinx->SetMatchMode(SPH_MATCH_EXTENDED);
// 取到的原始数据
$orgDatas = $sphinx->Query($keyword, $indexName);
// 调试用,如果有错误的话,可以打印$errors的值
$errors = $sphinx->GetLastError();
var_dump($errors);
echo '<pre>';
var_dump($orgDatas);
/* // 下面是对结果的处理
$datas = array('goods'=>array(),'total'=>0);
if ($orgDatas['total'] > 0) {
$datas['total'] = $orgDatas['total'];
foreach ($orgDatas['matches'] AS $val) {
$val['attrs']['goods_id'] = $val['attrs']['goods_id_new'];
unset($val['attrs']['goods_id_new']);
$datas['goods'][] = $val['attrs'];
}
}
var_dump($datas);
*/
}
} else {
echo '<form method="get"><input type="type"
name="keyword"><input type="submit"
value="商品搜索"></form>';
}
?>
代码可以点此处 下载 http://b332.com/source/soft/sphinx-for-chinese-1.10.1/sphinxapi.tar.gz
更多详细配置请参看/usr/local/sphinx-for-chinese-1.10.1/etc/sphinx.conf.dist文件里面有包括实时索引,增量索引等很多内容,英文原版的,很详细
尊重原创,尊重作者,转载请注明出处。本文来自http://b332.com/post/29发表评论
-
调试jdk中的源码,查看jdk局部变量
2013-06-15 23:30 1055调试jdk中的源码,查看jdk局部变量 2012-04 ... -
Eclipse快捷键 10个最有用的快捷键<转>
2013-04-11 23:28 1082Eclipse中10个最有用的快捷键组合 一个Eclip ... -
Lucene 3.6 中文分词、分页查询、高亮显示等
2012-12-09 23:35 18241、准备工作 下载lucene 3.6.1 : htt ... -
Maven实战(九)——打包的技巧(转)
2012-10-12 00:41 941“打包“这个词听起 ... -
基于Maven的web工程如何配置嵌入式Jetty Server开发调试环境(转)
2012-10-12 00:28 9421、首先在web工程的POM文件里添加依赖jar包如下: ... -
轻轻松松学Solr(1)--概述及安装[转]
2012-09-18 14:59 998概述 这段时间对企 ... -
分析Netty工作流程[转]
2012-09-04 19:02 893下面以Netty中Echo的例 ... -
让eclipse在ubuntu下面好看一点
2012-03-27 10:17 925<p> </p> <h1 cla ... -
zookeeper安装和应用场合(名字,配置,锁,队列,集群管理)[转]
2012-01-12 17:59 1653安装和配置详解 本文 ... -
Jakarta-Common-BeanUtils使用笔记[转]
2012-01-10 14:13 1160Jakarta-Common-BeanUtils ... -
一个关于Java Thread wait(),notify()的实用例【转】
2012-01-07 16:05 1024///// // ProducerConsume ... -
Java基础:Java中的 assert 关键字解析【转】
2012-01-06 19:50 1066J2SE 1.4在语言上提供了 ... -
一篇不错的讲解Java异常的文章(转载)----感觉很不错,读了以后很有启发[转]
2012-01-06 15:02 1272六种异常处理的陋习 ... -
如何解决HP QC(Quality Center)在Windows 7下不能工作的问题
2011-12-26 10:48 1588HP QC(Quantity Center) 是一款不错的测 ... -
JAVA读写文件,中文乱码 【转】
2011-12-19 23:43 2123最近在做HTML静态生成,需要从硬盘上把模版文件的内容读出来。 ... -
Java 6 JVM参数选项大全(中文版)【转】
2011-12-19 19:51 974Java 6 JVM参数选项大全(中文版) 作者 ... -
使用assembly plugin实现自定义打包【转】
2011-12-13 01:58 975在上一篇文章中,讨论到在对maven的机制不熟悉的情况下,为了 ... -
使用maven ant task实现非标准打包[转]
2011-12-13 01:56 1050maven很强大,但是总有些事情干起来不是得心应手,没有使用a ... -
Java日期转换SimpleDateFormat格式大全【转】
2011-12-08 20:22 131924小时制时间 显示: public clas ... -
使用Spring的表单标签库
2011-11-22 20:08 107813.9. 使用Spring的 ...
相关推荐
本手册将详细讲解如何在生产环境中安装和配置Sphinx以及与MySQL的集成。 ### 一、Sphinx简介 Sphinx提供实时索引、低延迟查询、布尔运算、短语搜索以及同义词支持等功能,适合于大数据量的搜索引擎应用。其主要...
本文将详细介绍如何在Linux环境中安装和配置Sphinx和CoreSeek,以及如何通过PHP进行调用。 ### 1. Sphinx介绍 Sphinx是一款开源的实时全文搜索引擎,具有高效、灵活和高度可定制的特点。它支持多种编程语言的API,...
在描述中提到了一个博文链接,虽然具体内容没有给出,但可以推测博主“sinykk”分享了他在安装和配置Sphinx以及与Coreseek集成过程中的经验。由于没有实际的博文内容,我将基于一般流程来解释Sphinx的安装和使用。 ...
### Sphinx 安装及使用详解 #### 一、Sphinx简介 Sphinx是一款高性能的全文搜索引擎,主要用于提高大型数据集的搜索效率。它能够独立运行,也可以作为应用程序的一部分嵌入到其他软件中。Sphinx主要适用于对性能...
- 将编译后的`searchd`和`sphinx.conf`配置文件放置到服务器合适的位置,并编辑`sphinx.conf`,配置索引路径、端口、日志文件等相关参数。 2. **CoreSeek 3.1的安装**: - CoreSeek是Sphinx的中文版,增强了对...
本文档将详细介绍如何使用Sphinx来为Python项目创建API文档。 #### 二、准备工作 在开始之前,请确保已经安装了Python和pip,因为Sphinx的安装依赖这些工具。 #### 三、安装Sphinx 可以通过pip来安装Sphinx: `...
这个接口提供了与Sphinx服务器通信的能力,实现了对Sphinx的各种API调用,包括连接、查询、处理结果集等。 **核心组件** 1. **`SphinxClient`**: 这是JAVAAPI的核心类,它负责与Sphinx服务器进行通信。你可以创建...
除了安装和配置Sphinx外,我们还需要考虑如何将其集成到现有的应用中。对于基于PHP的应用,可以使用`php-sphinx`扩展来实现Sphinx的查询功能。 ##### 3.1 安装php-sphinx扩展 ```bash pecl install sphinx ``` ...
### Windows 下安装使用 Sphinx #### 一、Sphinx 概述 Sphinx 是一款由俄罗斯开发者 Andrew Aksyonoff 开发的高性能全文搜索软件包,它支持 GPL 和商业许可协议。全文检索是一种信息检索技术,它以文档的全部文本...
练习sphinx生成项目的api文档, 生成pyzo-4.9.0中的pyzo项目的api文档, html格式或pdf格式 准备:将项目一个文件夹中, 然后在cmd中cd到这个文件夹下。 sphinx生成html格式的api文档的命令: sphinx-quickstart ...
Sphinx是一款强大的开源全文检索引擎,而Coreseek是基于Sphinx的免费开源中文全文检索引擎。...而提供的中文手册则为中文用户提供了一本详尽的指导手册,无论是在安装、配置还是开发集成方面,都能提供帮助。
Sphinx的安装过程涉及多个方面,包括选择支持的操作系统、安装必要的工具、配置环境变量、以及如何在不同的操作系统(如Linux、BSD、Windows)上安装。安装过程中可能会遇到一些问题,文档中也提供了一些已知问题的...
windows 下 sphinx 增量索引配置文件 mssql
#### 三、Sphinx的安装与配置 **步骤**: 1. **准备数据**: 数据需要事先准备好,并导入到数据库中。 2. **配置Sphinx**: 创建Sphinx配置文件,定义索引等参数。 3. **生成索引**: 使用Sphinx工具生成全文索引。 4....
确保你的开发环境中已安装Java JDK,并配置好环境变量。Sphinx-4的配置文件(通常是config.xml)需要根据项目需求进行适当修改,包括设置声学模型、语言模型以及麦克风设备等。 【声学模型与语言模型】 声学模型是...
4. **编译与安装**:进入Sphinx源码目录,执行配置脚本,配置过程中要确保选择安装中文支持。然后进行编译和安装,这个过程可能需要安装一些额外的依赖,如libxml2和libxslt。 5. **配置Sphinx**:在Sphinx的配置...
在Java中实现增量检索,需要正确配置Sphinx的`delta`索引,并在数据更新时调用相应的API进行增量更新。 4. **简单配置**: 配置Sphinx通常涉及编辑`sphinx.conf`文件,设置数据源、索引、搜索服务等参数。在Java...
3. 编译并安装扩展:运行`phpize`来配置编译环境,然后执行`./configure --with-sphinx=/path/to/sphinx`,最后使用`make && make install`完成编译和安装。 4. 更新PHP配置:将新安装的Sphinx扩展添加到php.ini文件...