使用PHP+Sphinx建立高效的站内搜索引擎
1.为什么要使用Sphinx
假设你现在运营着一个论坛,论坛数据已经超过100W,很多用户都反映论坛搜索的速度非常慢,那么这时你就可以考虑使用Sphinx了(当然其他的全文检索程序或方法也行)。
2.Sphinx是什么
Sphinx由俄罗斯人Andrew Aksyonoff 开发的高性能全文搜索软件包,在GPL与商业协议双许可协议下发行。
全文检索是指以文档的全部文本信息作为检索对象的一种信息检索技术。检索的对象有可能是文章的标题,也有可能是文章的作者,也有可能是文章摘要或内容。
3.Sphinx的特性
?高速索引 (在新款CPU上,近10 MB/秒);
?高速搜索 (2-4G的文本量中平均查询速度不到0.1秒);
?高可用性 (单CPU上最大可支持100 GB的文本,100M文档);
?提供良好的相关性排名
?支持分布式搜索;
?提供文档摘要生成;
?提供从MySQL内部的插件式存储引擎上搜索
?支持布尔,短语, 和近义词查询;
?支持每个文档多个全文检索域(默认最大32个);
?支持每个文档多属性;
?支持断词;
?支持单字节编码与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。

在mysql中,可以利用char()和REPLACE()函数来替换换行符;REPLACE()函数可以用新字符串替换列中的换行符,而换行符可使用“char(13)”来表示,语法为“replace(字段名,char(13),'新字符串') ”。

使用PHP和coreseek开发智能推荐系统的关键技术智能推荐系统是现代互联网应用中广泛使用的一种技术,它能够根据用户的兴趣和行为,为用户提供个性化的推荐内容。在本文中,我们将介绍如何使用PHP和coreseek开发一个基于关键技术的智能推荐系统。首先,我们需要了解一下coreseek是什么。coreseek是一个开源的全文检索引擎,它基于sphinx全文检

构建基于PHP和coreseek的播客内容搜索工具随着数字媒体的迅猛发展,播客(podcast)已经成为人们获取信息、娱乐和学习的重要渠道之一。然而,随着越来越多的播客内容产生,如何快速准确地找到感兴趣的内容成为了一个亟待解决的问题。本文将介绍如何使用PHP和coreseek构建一个高效的播客内容搜索工具,并提供相关的代码示例。首先,我们需要明确corese

利用PHP和coreseek实现精准的食谱搜索功能概述:在现如今的快节奏生活中,越来越多的人开始注重自己的饮食健康。找到合适的食谱成为了一种需求。本文将介绍如何利用PHP和coreseek搜索引擎实现精准的食谱搜索功能,帮助用户轻松查找到符合自己需求的食谱。准备工作:在开始之前,我们需要准备一些工具:PHP环境:在本地或者服务器上搭建PHP环境,确保可以运行

使用PHP和coreseek开发强大的电商平台商品搜索引擎随着电子商务的快速发展,商品搜索引擎成为电商平台中不可或缺的一环。一个强大的商品搜索引擎可以帮助用户快速找到他们想要的商品,提升用户体验,从而增加销售量。本文将介绍如何使用PHP和coreseek开发一个强大的电商平台商品搜索引擎,并提供一些代码示例。一、coreseek简介coreseek是一个基于

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于InnoDB之MVCC原理的相关问题,MVCC即多版本并发控制,主要是为了提高数据库的并发性能,下面一起来看一下,希望对大家有帮助。

利用PHP和coreseek实现精准的用户画像分析功能摘要:随着互联网的普及和发展,人们在网络上留下了大量的个人信息,包括浏览历史、购买记录、社交网络等。利用这些数据可以对用户进行精准的画像分析,为企业提供更好的个性化推荐和定制化服务。本文将介绍如何利用PHP和coreseek实现这个功能,并提供代码示例。一、什么是用户画像分析功能?用户画像分析功能是指通过

使用PHP和coreseek打造人才招聘网站的职位搜索功能人才招聘网站在现代社会中扮演着重要的角色,为企业提供了一个便捷的方式来寻找合适的员工。而对于求职者来说,拥有一个高效的职位搜索功能也是非常重要的。本文将介绍如何使用PHP和coreseek,一个开源的全文搜索引擎,来为人才招聘网站构建一个功能强大的职位搜索功能。首先,我们需要确保PHP和coresee


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

DVWA
Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software

Atom editor mac version download
The most popular open source editor

Dreamweaver Mac version
Visual web development tools

PhpStorm Mac version
The latest (2018.2.1) professional PHP integrated development tool

SecLists
SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.
