1.    为什么要使用Sphinx

 

假设你现在运营着一个论坛,论坛数据已经超过100W,很多用户都反映论坛搜索的速度非常慢,那么这时你就可以考虑使用Sphinx了(当然其他的全文检索程序或方法也行)。

2.    Sphinx是什么

 

Sphinx由俄罗斯人Andrew Aksyonoff 开发的高性能全文搜索软件包,在GPL与商业协议双许可协议下发行。

全文检索是指以文档的全部文本信息作为检索对象的一种信息检索技术。检索的对象有可能是文章的标题,也有可能是文章的作者,也有可能是文章摘要或内容。

3.    Sphinx的特性

 

l  高速索引 (在新款CPU上,近10 MB/秒);

l  高速搜索 (2-4G的文本量中平均查询速度不到0.1秒);

l  高可用性 (单CPU上最大可支持100 GB的文本,100M文档);

l  提供良好的相关性排名

l  支持分布式搜索;

l  提供文档摘要生成;

l  提供从MySQL内部的插件式存储引擎上搜索

l  支持布尔,短语, 和近义词查询;

l  支持每个文档多个全文检索域(默认最大32个);

l  支持每个文档多属性;

l  支持断词;

l  支持单字节编码与UTF-8编码;

4.    下载并安装Sphinx

 

打开网址http://www.coreseek.cn/news/7/52/ 找到适合自己的操作系统的版本,比如我是Windows那么我就可以下载Coreseek Win32通用版本,Linux下可以下载源码包,自己编译安装。这里解释下为什么我们下载的程序叫Coreseek,Coreseek是基于Sphinx开发的一款软件,对Sphinx做了一些改动,在中文方面支持得比Sphinx好,所以我们使用之。

下载完成后,将程序解压到你想解压的地方,比如我就想解压到E盘根目录,之后修改目录名为Coreseek,大功告成Coreseek安装完成了,安装的目录是在E:\coreseek\。

5.    使用Sphinx

我要使用Sphinx需要做以下几件事

1)        首先得有数据

2)        建立Sphinx配置文件

3)        生成索引

4)        启动Sphinx

5)        使用之(调用api或search.exe程序进行查询)

第1件:(导入数据)

我们建立测试所需要用到得数据库、表以及数据,篇幅有限,这些在附件中都有,下载后导入MySQL即可。

第2件:(建立配置文件)

接下来我们需要建立一个Sphinx的配置文件 E:\coreseek\etc\mysql.conf,将其内容改为下面这些:

source mysql

{

type                                         = mysql

sql_host                                    = localhost

sql_user                                    = root

sql_pass                                          =

sql_db                                      = test

sql_port                                    = 3306

sql_query_pre                         = SET NAMES utf8

sql_query                                 = SELECT id,addtime,title,content FROM post

sql_attr_timestamp                 = addtime

}

index mysql

{

source                                      = mysql

path                                         = E:/coreseek/var/data/mysql

charset_dictpath                   = E:/coreseek/etc/

charset_type                           = zh_cn.utf-8

}

searchd

{

listen                                         = 9312

max_matches                         = 1000

pid_file                                     = E:/coreseek/var/log/searchd_mysql.pid

log                                            = E:/coreseek/var/log/searchd_mysql.log

query_log                                = E:/coreseek/var/log/query_mysql.log

}

先讲下这个配置文件中每项的含义。

source mysql{} 定义源名称为mysql,也可以叫其他的,比如:source xxx{}

type  数据源类型

sql_* 数据相关的配置,比如sql_host,sql_pass什么的,这些不解释鸟

sql_query 建立索引时的查询命令,在这里尽可能不使用where或group by,将where与groupby的内容交给sphinx,由sphinx进行条件过滤与groupby效率会更高,注意:select 的字段必须包括一个唯一主键以及要全文检索的字段,where中要用到的字段也要select出来

sql_query_pre 在执行sql_query前执行的sql命令, 可以有多条

sql_attr 以这个开头的配置项,表示属性字段,在where,orderby,groupby中出现的字段要分别定义一个属性,定义不同类型的字段要用不同的属性名,比如上面的sql_attr_timestamp就是时间戳类型。

index mysql{} 定义索引名称为mysql,也可以叫其他的,比如:index xxx{}

source 关联源,就是source xxx定义的。

path 索引文件存放路径,比如:E:/coreseek/var/data/mysql 实际存放在E:/coreseek/var/data/目录,然后创建多个名称为mysql后缀却不同的索引文件

charset_dictpath  指明分词法读取词典文件的位置,当启用分词法时,为必填项。在使用LibMMSeg作为分词 库时,需要确保词典文件uni.lib在指定的目录下

charset_type 字符集,比如charset_type = zh_cn.gbk

searchd{} sphinx守护进程配置

listen 监听端口

max_matches最大匹配数,也就是查找的数据再多也只返回这里设置的1000条

pid_file pid文件路径

log全文检索日志

query_log查询日志

好了,配置文件就这样,配置的参数还有很多,大家可以自己查文档。

第3件:(生成索引)

开始 -> 运行 -> 输入cmd回车,打开命令行工具

e:\coreseek\bin\indexer --config e:\coreseek\etc\mysql.conf --all

这一串东西其实就是调用indexer程序来生成所有索引

如果只想对某个数据源进行索引,则可以这样:e:\coreseek\bin\indexer --config e:\coreseek\etc\mysql.conf 索引名称(索引名称指配置文件中所定义的)

--config,--all这些都是indexer程序的参数,想了解更多参数的朋友可以查看文档

运行命令后如果你没看到FATAL,ERROR这些东西,那么索引文件就算生成成功了,比如我看到得就是

………省略………

using config file 'e:\coreseek\etc\mysql.conf'...

indexing index 'mysql'...

collected 4 docs, 0.0 MB

………省略………

第4件:(启动Sphinx)

同样命令行下

e:\coreseek\bin\searchd --config e:\coreseek\etc\mysql.conf

运行后提示了一大堆东西

using config file 'e:\coreseek\etc\mysql.conf'...

listening on all interfaces, port=9312

accepting connections

不用管这些鸟文是啥意思,反正Sphinx是启动好了。

现在有一串鸟文的这个命令行是不能关的,因为关了Sphinx也就关了,如果觉得这样不爽,可以将Sphinx安装成系统服务,在后台运行。

安装系统服务只需在命令行中输入以下命令

e:\coreseek\bin\searchd --config e:\coreseek\etc\mysql.conf --install

安装之后记得启动这个服务,不会启动那我没法,自己google。

第5步:(使用Sphinx)

在web根目录下建立一个search目录(当然不在根目录也行,同样目录名也可以随取),复制E:\coreseek\api\ sphinxapi.php文件到search目录(sphinxapi.php这个是sphinx官方提供的api),开始php程序的编写。

在search目录建立一个文件,名字叫啥都行,我管它叫index.php,其内容如下

<?php

include 'sphinxapi.php';  // 加载Sphinx API

$sc = new SphinxClient(); // 实例化Api

$sc->setServer('localhost', 9312); // 设置服务端,第一个参数sphinx服务器地址,第二个sphinx监听端口

$res = $sc->query('sphinx', 'mysql'); // 执行查询,第一个参数查询的关键字,第二个查询的索引名称,mysql索引名称(这个也是在配置文件中定义的),多个索引名称以,分开,也可以用*表示所有索引。

print_r($res);

打印结果:

Array

(

………省略………

[matches] => Array

(

[2] => Array

(

[weight] => 2

[attrs] => Array

(

[addtime] => 1282622004

)

)

[4] => Array

(

[weight] => 2

[attrs] => Array

(

[addtime] => 1282622079

)

)

)

………省略………

)

Matches中就是查询的结果了,但是仿佛不是我们想要的数据,比如titile,content字段的内容就没有查询出来,根据官方的说明是Sphinx并没有连接到MySQL去取数据,只是根据它自己的索引内容进行计算,因此如果想用Sphinx提供的API去取得我们想要的数据,还必须以查询的结果为依据,再次查询MySQL从而得到我们想要的数据。

查询结果中键值分别表示

另类方式实现PHP后台运行

使用PHP+Sphinx建立高效的站内搜索引擎相关推荐

  1. 站内搜寻引擎 php mysql_使用PHP+Sphinx建立高效的站内搜索引擎的方法

    1.    为什么要使用Sphinx 假设你现在运营着一个论坛,论坛数据已经超过100+W,很多用户都反映论坛搜索的速度非常慢,那么这时你就可以考虑使用Sphinx了(当然其他的全文检索程序或方法也行 ...

  2. php sphinx使用教程,使用PHP+Sphinx建立高效的站内搜索引擎

    1.    为什么要使用Sphinx 假设你现在运营着一个论坛,论坛数据已经超过100W,很多用户都反映论坛搜索的速度非常慢,那么这时你就可以考虑使用Sphinx了(当然其他的全文检索程序或方法也行) ...

  3. 站内搜索引擎之比较〔转〕

    有很多网站都在网页上加个"站内搜索引擎"."搜索引擎"."全文检索"等等相关字样. 用户一用,结果发现,既不能多关键组合查询,也不能支持国际 ...

  4. 站内搜索引擎初探:haystack全文检索,whoosh搜索引擎,jieba中文分词

    在做django项目当中,不免要使用到站内搜索引擎,网站呈现的内容除了列表,详细页,首页之外,用户也需要通过搜索引擎来找到自己需要的内容. 安装: pip install django-haystac ...

  5. 加入一个基于GOOGLE的站内搜索引擎

    由于这一次的客户只能提供虚拟主机作为项目运行平台,无法搭配中文分词组件,原来自行开发的站内搜索引擎无法发挥最大的功效(主要是不能自动分析关键词,只能通过指定相关索引字段,以及手工输入TAG的机制来生成 ...

  6. 王通:站内搜索引擎的SEO策略

    越来越多的大中型网站都有了站内搜索引擎,站内搜索引擎如果采用正确的SEO策略,可以产生大量非常合理的关键词页面,可以在各大搜索引擎中带来巨大的流量.站内搜索引擎该如何SEO呢?很简单,只需要做好以下三 ...

  7. 用C++来设计开发的基于boost文档的站内搜索引擎项目,点赞收藏起来!

    So Easy搜索引擎 项目描述 主要技术 项目特点 0. 准备工作 1. 预处理模块 2. 索引模块 3. 搜索模块 4. 服务器模块 项目难点和提升 结束语 项目描述 boost官网虽然提供了在线 ...

  8. 【项目】 基于BOOST的站内搜索引擎

    目录 1. 简介 建立搜索引擎的宏观体系 技术栈和项目环境 正排索引 and 倒排索引 2. 数据去标签与数据清洗模块 -- Parser 数据去标签 parser.cc parser.cc 的代码结 ...

  9. 如何搭建一个站内搜索引擎(一) 第1章 写在最前

    搜索引擎,对很多人来说,熟悉又陌生.熟悉,是因为每个人每天都能接触到,比如百度.google.淘宝内部搜索:陌生,是因为鲜有人了解他的原理. 因为工作需要,有幸参与负责了一个站内搜索的项目.所以可以从 ...

最新文章

  1. 32位汇编寄存器及汇编指令
  2. File Filter用法
  3. Solaris 10 x86 上折腾Mono
  4. 招聘 | 平安人寿人工智能研发团队北京研发中心
  5. 复盘从一个监控主机到核心路由沦陷
  6. Java 内存泄露以及避免方法
  7. redis-数据类型-列表list类型
  8. 哔哩哔哩公司swot分析_可口可乐公司2019年SWOT分析
  9. 获取目录文件.bat
  10. Android服务函数远程调用源码分析
  11. python源代码被解释器转换后的格式_python源代码被解释器转换后的格式是什么?...
  12. Web信息收集,互联网上的裸奔者
  13. c语言股票最大收益_C语言买卖股票问题
  14. 2018.11.07【NOIP训练】lzy的游戏(01背包)
  15. 有关找共享单车那些事
  16. 如何做一个根据自己的需求做一个完美的商品详情页?
  17. Word自动编号,掌握这几招,再也不用手动敲编号!
  18. 微信公众号一次性订阅消息
  19. java jdk v1.6_jdk1.6 64位
  20. java io处理_java之IO处理

热门文章

  1. Linux配置vim使得代码缩进
  2. 笔记本蓝牙显示输入码无效_如何凭借一把键盘游走桌面?米物蓝牙双模键盘
  3. C语言中的指针和内存泄漏
  4. python基础--urllib
  5. python基础知识整理 第一节:入门记录(包含代码与执行结果)
  6. OpenCV(项目)二维码识别(二维码、条形码)
  7. 属性匹配工具_测试工具链——高效构建Mock服务
  8. SSC:基于点云语义上下文的大规模激光SLAM的位置识别方法
  9. leetcode-386 字典序排数
  10. centos设置网络自动启动