Sphinx+PHP+Mysql高效搜索web端搭建(windows)

来源:互联网 发布:淘宝卖衣服怎么进货 编辑:程序博客网 时间:2024/05/17 07:01
  • 一安装配置wampserver
  • 二下载coreseek
    • 1安装coreseek
    • 2测试coreseek
  • 三配置及其启动

 最近几天给朋友搭建了个社工库,框架是Sphinx+PHP+MySQL。但是源码附带文档写的很烂,而且是Linux下的, 所以找了些相关资料配置了下,写出来分享给大家。大致源码效果图如下(可自行搜索源码下载):

这里写图片描述 
代码资源截图如下: 
这里写图片描述

这里只提供配置,不提供数据,因为我也没有,相当于技术研究。 
 简单介绍下吧,Sphinx是一个基于SQL的全文检索引擎,在数据库数据量比较大的时候可以派上用场,检索效率高,具体概念百度百科上也有。而coreseek是基于sphinx的一个框架,并且支持中文分词库。也就是说装coreeek就够了(下图中的描述也很清楚,coreseek里面已经包含了mmseg,sphinxse,php的接口,注意mysql其实不一定非要是5.5.15版本,这个就不用多说了),官网下载连接如下: 
这里写图片描述 
传送门

注意:本文可能需要一定从事编程行业的基础知识,纯小白需要自己查清楚这些概念。

环境:windows7。

一、安装配置wampserver:

 wampserver集成了appache,php,mysql,能够比较便捷的搭建web端,概念就不多说配置方法自行百度,要能跑起web来,有机会再写吧。 
比较懒,直接丢个连接(随便找的连接,如果需要自己找更好): 
传送门

 配置好之后,把代码放到你配置的wamserver的web目录下(忽略txt文件夹,style.css,test.php这几个是我自己改的): 
这里写图片描述

 安装navicat(连接mysql的工具),自行从网上去查找下载破解版,安装完成后要能连上,连上之后, 
运行以下命令,创建mysql用户和数据库:

-- 创建数据库CREATE DATABASE `Worker`;-- 创建用户和角色-- CREATE USER 'ACCOUNT_ACC'@'localhost' IDENTIFIED BY '7ujm*IK<';-- GRANT SELECT, INSERT, UPDATE ON `KC_ACCOUNT`.* TO 'ACCOUNT_ACC'@'localhost';-- 方式二GRANT USAGE ON *.* TO 'ygg'@'localhost' IDENTIFIED BY '654321';GRANT SELECT, INSERT, UPDATE , DELETE, CREATE ON `Worker`.* TO 'ygg'@'localhost';
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

二、下载coreseek:

1、安装coreseek:

下载好coreseek解压到你想要的目录下,就算安装好了(忽略start.cm 
d,那是我写的启动脚本): 
这里写图片描述 
图里已经说得很清楚了,那我就不在多说:

2、测试coreseek:

测试方法其实不是很想多说,但有助于配置,引用下别人的 
传送门: 
第1步:在mysql导入测试数据: 
随便建立个用户表,插几条数据

use worker;DROP TABLE IF EXISTS `users`;CREATE TABLE `users` ( `id` int(9) unsigned NOT NULL AUTO_INCREMENT,  `username` varchar(255) default NULL,  `password` varchar(255) default NULL,  `email` varchar(255) default NULL,  KEY `username` (`username`),  KEY `email` (`email`)  PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;-- ------------------------------ Records of users-- ----------------------------INSERT INTO `users` VALUES (1,'acn', '123456', '617925118@qq.com');
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

第2步:建立配置文件: 
在之前的安装的coreseek-4.1-win32\etc目录下建立一个test.conf,将其内容改为下面这些:

source mysql{type       = mysql sql_host   = localhost #数据库地址sql_user   = ygg  #数据库用户名sql_pass   = 654321    #数据库密码sql_db     = worker  #数据库名sql_port   = 3306  #端口号sql_query_pre   = SET NAMES utf8  #设置字符集sql_query       = SELECT id,username,email FROM members #sql语句sql_attr_timestamp  = addtime}index mysql{source      = mysqlpath        = E:/coreseek-4.1-win32/var/data/test #索引目录charset_dictpath  = E:/coreseek-4.1-win32/etc/ charset_type      = zh_cn.utf-8 #编码}searchd{listen         = 9312 #监听端口max_matches    = 1000 #最大查询数pid_file       = E:/coreseek-4.1-win32/var/log/searchd_mysql.pid log            = E:/coreseek-4.1-win32/var/log/searchd_mysql.logquery_log      = E:/coreseek-4.1-win32/var/log/query_mysql.log}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

大多数参数挺简单,就不多说,理解下。 
第3步:生成索引: 
打开cmd 
输入: 
E:\coreseek-4.1-win32\bin\indexer –c E:\coreseek-4.1-win32\etc\test.conf –all 生成索引。

第4步:启动Sphinx: 
同样命令行下 :

E:\coreseek-4.1-win32\bin\searchd –c E:\coreseek-4.1-win32\etc\test.conf

三、配置及其启动:

 修改mysqlcsft.conf为如下(当然数据库,用户名这些自己看着替换)并放在E:\coreseek-4.1-win32\etc目录下:

source spdb1{    type                    = mysql    sql_host                = 127.0.0.1    sql_user                = ygg    sql_pass                = 654321    sql_db                  = worker    sql_port                = 3306    sql_query_pre           = SET NAMES utf8    sql_query               = SELECT `id`, 1 AS table_id, `username`, `email`, `password` FROM spdb1    sql_attr_uint           = table_id         #从SQL读取到的值必须为整数    #sql_attr_timestamp     = date_added  #从SQL读取到的值必须为整数,作为时间属性    sql_query_info_pre      = SET NAMES utf8                                        #命令行查询时,设置正确的字符集    sql_query_info          = SELECT * WHERE ID=$id #命令行查询时,从数据库读取原始数据信息}source spdb2 : spdb1{    sql_query = SELECT `id`, 2 AS table_id, `username`, `email`, `password` FROM spdb2}source spdb3 : spdb1{    sql_query = SELECT `id`, 3 AS table_id, `username`, `email`, `password` FROM spdb3}source spdb4 : spdb1{    sql_query = SELECT `id`, 4 AS table_id, `username`, `email`, `password` FROM spdb4}source spdb5 : spdb1{    sql_query = SELECT `id`, 5 AS table_id, `username`, `email`, `password` FROM spdb5}#index定义index spdb1{    source            = spdb1    #对应的source名称    path              = E:/coreseek-4.1-win32/var/data/spdb1 #请修改为实际使用的绝对路径例如:/usr/local/coreseek/var/...    docinfo           = extern    mlock             = 0    morphology        = none    min_word_len      = 1    ondisk_dict       = 1    html_strip        = 0    #中文分词配置,详情请查看:http://www.coreseek.cn/products-install/coreseek_mmseg/    charset_dictpath = E:/coreseek-4.1-win32/etc/ #Windows环境下设置,/符号结尾,最好给出绝对路径,例如:C:/usr/local/coreseek/etc/...    charset_type        = zh_cn.utf-8    enable_star = 0     #不使用通配符,默认不启用,可以不写    min_infix_len=1     #使用中缀索引,并且最小索引为1,关于该项作用不知者可以查询手册    infix_fields= username,email    #因为中缀索引会使索引量急剧膨胀,所以最好选择你认为最主要的少量几个字段做中缀索引。(模糊查询)}index spdb2 : spdb1{    source = spdb2    path =  E:/coreseek-4.1-win32/var/data/spdb2}index spdb3 : spdb1{    source = spdb3    path =  E:/coreseek-4.1-win32/var/data/spdb3}index spdb4 : spdb1{    source = spdb4    path =  E:/coreseek-4.1-win32/var/data/spdb4}index spdb5 : spdb1{    source = spdb5    path =  E:/coreseek-4.1-win32/var/data/spdb5}#全局index定义indexer{    mem_limit            = 512M   #默认32M,不要太大,否则会报错}#searchd服务定义searchd{    listen               = 9312   #查询服务监听端口,开启了才会工作    read_timeout         = 5      #超时    max_children         = 30     #最大进程    max_matches          = 1000   #返回1000条    seamless_rotate      = 0    preopen_indexes      = 0    unlink_old           = 1    pid_file = E:/coreseek-4.1-win32/var/log/searchd.pid #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...    log = E:/coreseek-4.1-win32/var/log/searchd.log        #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...    query_log = E:/coreseek-4.1-win32/var/log/query.log #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...    binlog_path =                                #关闭binlog日志    compat_sphinxql_magics = 0}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98

在E:\coreseek-4.1-win32目录下创建start.cmd脚本,以后启动就通过它来 
如图: 
这里写图片描述 
内容如下:

@SET path=.;bin;%path%@indexer -c etc\mysqlcsft.conf --all@searchd  -c etc\mysqlcsft.conf
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

 修改index.php,把mysql密码等数据修改过来:

 // 返回结果设置    $cl->SetServer('127.0.0.1', 9312);    $cl->SetConnectTimeout(3);    $cl->SetArrayResult(true);    // 设置是否全文匹配    /* if (!empty($_GET) && !empty($_GET['f']))     {        $cl->SetMatchMode(SPH_MATCH_ANY);    }  */    //$cl->SetMatchMode(SPH_MATCH_ANY);//设置为任意一项匹配    $cl->SetMatchMode(SPH_MATCH_PHRASE);//类似like    if (!empty($_GET) && !empty($_GET['p']))     {        $p = !intval(trim($_GET['p'])) == 0 ? intval(trim($_GET['p'])) - 1 : 0;        $p = $p * 20;        // 我在sed.conf 设置了最大返回结果数1000。但是我在生成页码的时候最多生成20页,我想能满足大部分搜索需求了。        // 以下语句表示从P参数偏移开始每次返回20条。        $cl->setLimits($p, 20);    } else     {        $cl->setLimits(0, 20);    }    $res = $cl->Query("$Keywords", "*");    //var_dump($res);    @mysql_connect("127.0.0.1", "ygg", "654321"); //数据库账号密码    mysql_select_db("worker"); //数据库库名名    mysql_query("set names utf8");    $tables = ['spdb1' ,'spdb2','spdb3','spdb4','spdb5'];  //把表名放入数组
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

 基本上就都修改完成了,可以直接启动,先启动wampserver,然后双击start.cmd启动coreseek: 
这里写图片描述 

这样就完成了。慢慢导入数据吧。

文章来源:http://blog.csdn.net/zy19940906/article/details/60467450

0 0