Sphinx详细安装配置.docx_第1页
Sphinx详细安装配置.docx_第2页
Sphinx详细安装配置.docx_第3页
Sphinx详细安装配置.docx_第4页
Sphinx详细安装配置.docx_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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官方下载(强烈推荐使用这个) cd /usr/local/src wget -c /files/sphinx-for-chinese-1.10.1-dev-r2287.tar.gz wget -c /files/xdict_1.1.tar.gz 2到本站下载(国外vps,性能不怎么好,而且速度慢,不推荐,只做备用) cd /usr/local/src wget -c /source/soft/sphinx-for-chinese-1.10.1/sphinx-for-chinese-1.10.1-dev-r2287.tar.gz wget -c /source/soft/sphinx-for-chinese-1.10.1/xdict_1.1.tar.gz2.安装sphinx-for-chinese-1.10.1 cd /usr/local/src 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就是为了指定这两 个位置的./configure -prefix=/usr/local/sphinx-for-chinese-1.10.1 -with-mysql-includes=/usr/local/webserver/mysql/include/mysql -with-mysql-libs=/usr/local/webserver/mysql/lib/mysql 显示如下图所示内容时,表示可以接着执行下面的make及make install命令 make make install #最后执行命令 ls /usr/local/sphinx-for-chinese-1.10.1/如果显示bin,etc和var三个目录表示安装成功 3.让Sphinx支持中文分词 cd /usr/local/src 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编译安装的 位置)ln -s /usr/local/webserver/mysql/lib/mysql/libmysqlclient.so.16.0.0 /usr/lib/libmysqlclient.so.16 再次执行/usr/local/sphinx-for-chinese-1.10.1/bin/mkdict xdict_1.1.txt xdict_1.1 #提示Chinese dictionary was successfully created!表示中文分词词典生成成功 cp xdict_1.1 /usr/local/sphinx-for-chinese-1.10.1/etc/xdict_1.1 4.配置Sphinx vi /usr/local/sphinx-for-chinese-1.10.1/etc/sphinx.conf 输入以下内容 # 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 = # listen = :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 create database sphinx collate utf8_general_ci;mysql grant all privileges on sphinx.* to sphinxuser% identified by sphinxpass;mysql grant all privileges on sphinx.* to sphinxuserlocalhost 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进程已经开启的话,应先关闭) #生成goods索引需要确保要连接的主机的MySQL数据库正常运行,并且3306端口可以访问/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命令行下测试搜索 /usr/local/sphinx-for-chinese-1.10.1/bin/search -c /usr/local/sphinx-for-chinese-1.10.1/etc/sphinx.conf 个性黑色搜索结果如下图示 3.开启守护进程(供API调用,如果配置文件改动,应重新启动这个进程,不然搜到的数据不是最新) /usr/local/sphinx-for-chinese-1.10.1/bin/searchd -c /usr/local/sphinx-for-chinese-1.10.1/etc/sphinx.conf & #执行后记得再按回车# 防火墙需要开放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端口/usr/local/sphinx-for-chinese-1.10.1/bin/searchd -c /usr/local/sphinx-for-chinese-1.10.1/etc/sphinx.conf & #执行后记得再按回车1. 把/usr/local/src/sphinx-for-chinese-1.10.1-dev-r2287/api/sphinxapi.php弄出 来,和下面第2点中的search.php放在同级目录(这个只是示例,放在哪里都可以,包含的时候找到正确的sphinxapi.php的位置即可) 2.编辑search.php文件,内容如下(具体内容请读者自己定,我这里只是示例) 1 ? intval($_GETpage) : 1; / 每页显示的数量 $pageSize = 30; $sphinx = new SphinxClient(); / 建立连接 $sphinx-SetServer($server, $port); / 连接超时时间(非常必要,比如sphinx服务器挂了等异常情况) 单位为s,秒 $sphinx-SetConnectTimeout(3); / 最大查询时间 单位为ms,毫秒 $sphinx-Set

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论