今天研究了一下window下安装sphinx,终于是把sphinx服务安装了(只限CMD端),至于如何在用PHP查询还在研究中,就说说一下如何在window下安装sphinx服务端大概流程:
1.首先查看服务器mysql 的版本,找对应的数据库版本对应SphinxSE下载,下载两个文件:mysql-5.0.45-sphinxse-0.9.8-win32.zip和sphinx-0.9.8.1-win32.zip,下载地址:http://sphinxsearch.com/downloads/archive/,查看服务器mysql版本可能用status命令查看:如图
2.如果服务器处于启状态,可以先关闭mysql服务器
3.解压mysql-5.0.45-sphinxse-0.9.8-win32.zip,将里面bin与share目录覆盖掉你的mysql安装目录下的相应目录 ,解压sphinx-0.9.8.1-win32.zip压缩包文件到d:websphinx 因为wamp服务器所有文件都放在web下,这里为了管理方便就统一放在web下。
4.下面就弄sphinx配置了,在sphinx目录下sphinx-min.conf.in拷贝一份重命名后缀名为.conf 的文件,这里我命名为sphinx-doc.conf
复制内容到剪贴板- # Minimal Sphinx configuration sample (clean, simple, functional)
- #
- # type----------------------------------------数据库类型,目前支持 mysql 与 pgsql
- # strip_html--------------------------------是否去掉html 标签
- # sql_host----------------------------------数据库主机地址
- # sql_user----------------------------------数据库用户名
- # sql_pass----------------------------------数据库密码
- # sql_db-------------------------------------数据库名称
- # sql_port-----------------------------------数据库采用的端口
- # sql_query_pre--------------------------执行sql前要设置的字符集,用utf8必须SET NAMES utf8
- # sql_query---------------------------------全文检索要显示的内容,在这里尽可能不使用where或 group by,将 where 与 groupby 的内容交给 sphinx,由 sphinx 进行条件过滤与 groupby 效率会更高
- # 注意: select 出来的字段必须至少包括一个唯一主键 (ARTICLESID) 以及要全文检索的字段,你计划原本在 where 中要用到的字段也要 select 出来
- # 这里不用使用orderby
- # sql_attr_ 开头的表示一些属性字段,你原计划要用在 where, orderby, groupby 中的字段要在这里定义(# 为自己添加的注释内容)
-
- #source 数据源名:
-
- source documents
- {
- type = mysql
- sql_host = localhost
- sql_user = root
- sql_pass =
- sql_db = DB_9streets
- sql_port = 3306 # optional, default is 3306
-
- 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 documents
- {
- source = documents
-
- #path 索引记录存放目录,如 d:/sphinx/data/cgfinal ,实际存放时会存放在 d:/sphinx/data 目录,然后创建多个 cgfinal 名称,不同扩展名的索引文件。
- path = d:/web/sphinx/doc
- docinfo = extern
- enable_star = 1
-
- min_word_len = 3
- min_prefix_len = 0
- min_infix_len = 3
- charset_type = sbcs
-
- # 其他的配置如 min_word_len, charset_type, charset_table, ngrams_chars, ngram_len 这些则是支持中文检索需要设置的内容。
- # 如果检索的不是中文,则 charset_table, ngrams_chars, min_word_len 就要设置不同的内容,具体官方网站的论坛中有很多,大家可以去搜索看看。
- }
-
- # mem_limit 索引使用内存最大限制,根据机器情况而定,默认是32M,太小的会影响索引的性能。
- indexer
- {
- mem_limit = 32M
- }
-
- # 搜索的守护进程配置
- # 在进行全文检索过程中,searchd要先开启,mysql在全文检索时才能连接到sphinx,由sphinx进行全文检索,再将结果返回给mysql
- # address 侦听请求的地址,不设置则侦听所有地址
- # port 侦听端口
- searchd
- {
- port = 3312
- log =d:/web/sphinx/logs/searched_doc.log
- query_log = d:/web/sphinx/logs/query_doc.log
- read_timeout = 5
- max_children = 30
- pid_file = d:/web/sphinx/logs/searched-doc.pid
- max_matches = 1000
- seamless_rotate = 0
- preopen_indexes = 0
- unlink_old = 1
- }
注意哦:配置要根据具体的服务器环境去设置,然后再copy一份到sphinxin目录下,命名和刚才重命名文件一样为sphinx-doc.conf
5.导入sphinx包下example.sql,自带sql文件数据库为test,或修改自带sql数据库名,也可以根据自身数据库导入:
复制内容到剪贴板- CREATE TABLE `documents` (
- `id` int(11) NOT NULL auto_increment,
- `group_id` int(11) NOT NULL,
- `group_id2` int(11) NOT NULL,
- `date_added` datetime NOT NULL,
- `title` varchar(255) NOT NULL,
- `content` text NOT NULL,
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB AUTO_INCREMENT=5;
-
- INSERT INTO `documents` VALUES ('1', '1', '5', '2008-09-13 21:37:47', 'test one', 'this is my test document number one. also checking search within phrases.');
- INSERT INTO `documents` VALUES ('2', '1', '6', '2008-09-13 21:37:47', 'test two', 'this is my test document number two');
- INSERT INTO `documents` VALUES ('3', '2', '7', '2008-09-13 21:37:47', 'another doc', 'this is another group');
- INSERT INTO `documents` VALUES ('4', '2', '8', '2008-09-13 21:37:47', 'doc number four', 'this is to test groups');
6.在 cmd 模式下(不了解CMD下操作,可以进入相关了解了解),在sphinx/bin目录下:
复制内容到剪贴板- indexer.exe --config d:/web/sphinx/bin/sphinx-doc.conf documents
7.运行检索守护进程 searchd.exe(注:如要把
phinx安装成系统服务,在后台运行,可用searchd.exe --config d:/web/sphinx/bin/sphinx-doc.conf --install):
复制内容到剪贴板- searchd.exe --config d:/web/sphinx/bin/sphinx-doc.conf
8. 查找关键词search.exe this is m
复制内容到剪贴板- search.exe -c sphinx-doc.conf this is m
运行了出现警告,(暂未找到原因,先忽略),说明我们的 Sphinx 已经正常运行了!
ps:PHP乍么连接起来还在研究中?找不到在window下对应的sphinx模块,有好方案的同学们,欢迎交流
---------------------------------------------window下安装sphinx实例华丽分割线-----------------------------------------------------
下面是PHP调用方法实例:
1.把sphinx/api目录拷贝到服务器某个项目中,在项目api文件夹里面建一个index.php的文件 ,写入以下代码:
复制内容到剪贴板
- require ( "sphinxapi.php" );
- $host = "dwz.com";
- $port = 3312;
- $sc = new SphinxClient(); // 实例化Api
- $sc->setServer('dwz.com', 3312); // 设置服务端,第一个参数sphinx服务器地址,第二个sphinx监听端口
- $res = $sc->query('test', 'documents'); // 执行查询,第一个参数查询的关键字,第二个查询的索引名
- $ids = join(',',array_keys($res['matches']));
- print_r($ids); // 获取主键
- ?>
运行结果下:
这里说明PHP调用sphinx成功了,剩下的就是php调用sphinx具体用法的深入研究了
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。