Sphinx和coreseek检索引擎
Sphinx是检索英文用,coreseek是检索中文用。
Sphinx(斯芬克斯)是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。
Like ‘%%’ sql 中国 xxx
Sphinx特别为一些脚本语言设计搜索API接口,如PHP,Python,Perl,Ruby等,同时为MySQL也设计了一个存储引擎插件。Sphinx 单一索引最大可包含1亿条记录,在1千万条记录情况下的查询速度为0.x秒(毫秒级)。Sphinx创建索引的速度为:创建100万条记录的索引只需 3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。
Sphinx的主要特性包括:
高速索引 (在新款CPU上,近10 MB/秒); 高速搜索 (2-4G的文本量中平均查询速度不到0.1秒); 高可用性 (单CPU上最大可支持100 GB的文本,100M文档); 提供良好的相关性排名 支持分布式搜索; 提供文档摘要生成; 提供从MySQL内部的插件式存储引擎上搜索 支持布尔,短语, 和近义词查询; 支持每个文档多个全文检索域(默认最大32个); 支持每个文档多属性; 支持断词; 支持单字节编码与UTF-8编码;
coreseek是一款基于sphinx开源的搜索引擎,专门为用户提供免费的中文全文检索系统,coreseek被称为带有中文分词的sphinx,与sphinx不同的是coreseek增加了一个带有中文分司的词库,这里使用了coreseek 3.2.14版本进行解讲,本篇讲解如何安装coreseek,并同时解决如何给php加上sphinx模块。首先在系统安装好lnmp环境即linux+mysql+php+nginx环境,如果不知道如何安装请看我之前见的关于lnmp环境安装文章。
http://219.232.239.243/uploads/csft/4.0/coreseek-4.1-win32.zip
从这里开始——
什么时候使用?
在MYSQL中当对一个文本类型字段进行Like并以%开头的查询时,会进行全表扫描。
模糊查询:
1.全文扫描太慢了
2.MySQL没有分词
Sphinx就可以解决以上两个问题。
总结:当一个功能对表中的text、varchar等文本类型的字段进行LIKE查询时,MySQL是全表扫描非常慢,需要使用sphinx。
我们商城中的 根据关键字搜索的功能需要Sphinx优化:1,可以解决性能的问题;2,可以解决分词的问题。
优化网站:搜索引擎用Sphinx、全站静态化
怎么使用Sphinx?
Sphinx有两种使用方式:
1.原始用法:Sphinx和MYSQL是两个独立的服务器
PHP把要搜索的短语发给sphinx服务器,sphinx返回的是记录的ID
PHP在使用sphinx返回的ID查询数据库

2.把sphinx集成到MYSQL里面去(没有单独的sphinx服务器)
PHP只需要写一个SQL语句即可,不用管sphinx,MYSQL会自己连接查询。
如果使用这种,需要在LINUX下重新编译MYSQL,把sphinx当成插件编译到MYSQL中去。

实际操作:
1.先下载sphinx包,我们下载的是coreseek。Coreseek是加了中文包的sphinx。
2.下载包后,几个重要的说明
etc中的csft_mysql.conf文件是数据库索引配置文件(后面会说如何配置参数):

注意:这个文件配置完成后需要放入bin文件夹下,并改名为sphinx.conf

indexer.exe文件是创建全文索引程序,一般都是通过命令行来创建(请看后面的创建数据源的索引);创建之前必须要把上面的csft_mysql.conf文件配置好。
一般情况下创建完索引后会在命令行先测试一下(请看后面的 bin\search -c bin\xx.conf +搜索词)。最后需要启动一下sphinx服务器( 请看后面的启动sphinx服务器),

这是sphinx的接口类库,需要把这个文件放入项目或框架中才能起到作用

实际应用:
先复制MYSQL的配置文件模板(即etc/csft_mysql.conf)到bin文件夹下并改名为sphinx.conf
SQL语句中 GROUP_CONCAT() 把多个值拼成一个字符串配置
既可以搜商品名称也可以搜商品属性的值,GROUP_CONCAT()把多个属性值拼成一个字符串。
一下两张图片是配置文件的信息:source + 名称 代表数据源,名称可以随便定义


注意:下面是杨写的,可做参考




创建数据源的索引:
在命令行窗口下执行 " bin\indexer -c bin\xxx.conf index即:创建名为index的数据源的索引。如果需要创建 xxx.conf 配置文件中的所有索引,刚使用 --all 替代index
搜索中文时,出现 iconv 不是内部或外部命令。解决办法:运行一下 "set PATH=%CD%\bin;%PATH%",即可解决;
这里面最后的那个sphinx代表bin/sphinx.conf文件

bin\search -c bin\xx.conf +搜索词 测试一下是否成功创建索引

设为开机启动:在控制面板——管理工具中——计划任务中设置


启动sphinx服务器
bin\searchd -c bin\sphinx.conf //开启搜索服务


注意:查看是否启动的方法是在:任务管理器->服务->右下角服务->找searchd,看是否已启动。
在coreseek/api目录下,有个名为 sphinxapi.php 的文件,这就是php api接口。

如何使用coreseek:使用之前必须要把sphinxapi.php这个接口文件放在项目中:
然后写下面的代码,设置coreseek参数
<html>
<head>
<form action="test.php" method="post">
输入关键词:<input type=“test” name="keyword"
size="30" />
<input type="submit" name="sub" value="搜索" /> </form>
<?php
echo "<pre>";
require_once('sphinxapi.php');
if(isset($_POST['sub']) && $_POST['keyword'] != ''){
$keyword = trim($_POST['keyword']);
$sph = new SphinxClient();
$sph->SetServer('localhost',9312);
//连接9312端口
$sph->setMatchMode(SPH_MATCH_ANY);
//设置匹配方式
$sph->SetSortMode(SPH_SORT_RELEVANCE);
//查询结果根据相似度排序
$sph->SetArrayResult(true);
//设置结果返回格式,true以数组,false以phphash格式返回,默认为false $result = $sph->query($keyword,'sphinx');
//执行搜索操作,参数(关键词,索引名),返回结果是商品的id
print_r($result);
} ?> </head>
</html>
Sphinx自动生成索引
在使用sphinx生成索引时,只会为当前数据库中的数据生成索引。生成索引之后,如果在数据库中又添加了新的数据,那么在sphinx 是无法搜索到新的数据,需要把新的数据也生成索引并添加到sphinx 中去才行。
如果每次插入新的数据之后都要手动在重建索引繁琐了,所以我们一般要配置sphinx每隔一段时间自动把数据库中最新插入的数据重新生成新的索引文件,并把这个新的索引文件合并到主索引文件上。
实际操作:
1.每次生成索引文件之后,要把最后一条记录的ID保存下来,下次ID大于这个ID 的就是新数据。
可以通过建一张表来保存这个ID。
配置sphinx让每次生成索引之后能够直接把最大的ID 更新进来。

2、定期为新添加的数据生成索引
修改sphinx定义一个新的数据源(新插入的还没有创建索引的数据)

新添加一个index索引(每个数据源对应一个index)

写一个bat脚本,让这个脚本定期的用新的数据源生成索引文件,并把这个索引文件合并到主索引文件(第一次生成的索引文件)上。

配置windows系统,让系统定期执行这个bat.脚本即可:双击这个文件即执行一遍更新一遍索引。

将文本转化为bat脚本










将sphinx引入 TP 框架

Sphinx和coreseek检索引擎的更多相关文章
- sphinx中文版Coreseek中文检索引擎安装和使用方法(Linux)
sphinx中文版Coreseek中文检索引擎安装和使用方法(Linux) 众所周知,在MYSQL数据库中,如果你在百万级别数据库中使用 like 的话那你一定在那骂娘,coreseek是一个 ...
- Coreseek + Sphinx + Mysql + PHP构建中文检索引擎
首先明确几个概念 Sphinx是开源的搜索引擎,它支持英文的全文检索.所以如果单独搭建Sphinx,你就已经可以使用全文索引了.但是往往我们要求的是中文索引,怎么做呢?国人提供了一个可供企业使用的,基 ...
- Linux下PHP+MySQL+CoreSeek中文检索引擎配置
说明: 操作系统:CentOS 5.X 服务器IP地址:192.168.21.127 Web环境:Nginx+PHP+MySQL 站点根目录:/usr/local/nginx/html 目的:安装co ...
- CoreSeek中文检索引擎
目的:安装coreseek中文检索引擎,配置MySQL数据库访问接口,使用PHP程序实现中文检索. CoreSeek官方网站: http://www.coreseek.cn/ http://www.c ...
- Sphinx与coreseek
Sphinx : 高性能SQL全文检索引擎 分类 编程技术 Sphinx是一款基于SQL的高性能全文检索引擎,Sphinx的性能在众多全文检索引擎中也是数一数二的,利用Sphinx,我们可以完成比数据 ...
- 【Java】Lucene检索引擎详解
基于Java的全文索引/检索引擎——Lucene Lucene不是一个完整的全文索引应用,而是是一个用Java写的全文索引引擎工具包,它可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能. L ...
- sphinx和coreseek
sphinx是国外的一款搜索软件. coreseek是在sphinx的基础上,增加了中文分词功能,换句话说,就是支持了中文. Coreseek发布了3.2.14版本和4.1版本,其中的3.2.14版本 ...
- ubuntu-10.04的测试环境 安装测试 Coreseek开源中文检索引擎-Sphinx中文版
主要参考文档:http://www.coreseek.cn/products-install/install_on_bsd_linux/ 一. 32位版本: coreseek安装需要预装的软件: ap ...
- 【整理】Linux下中文检索引擎coreseek4安装,以及PHP使用sphinx的三种方式(sphinxapi,sphinx的php扩展,SphinxSe作为mysql存储引擎)
一,软件准备 coreseek4.1 (包含coreseek测试版和mmseg最新版本,以及测试数据包[内置中文分词与搜索.单字切分.mysql数据源.python数据源.RT实时索引等测 ...
随机推荐
- IOS安全测试
1.本地存储安全 配置文件 缓存 数据库 测试数据 证书数据 2.网络通信安全 http明文通信 https证书认证 敏感参数弱加密 加签/验签策略 外接第三方SDK 外发不明数据 3.源代码安全 日 ...
- Android使用Fragment来实现ViewPager的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
以下内容为原创,转载请注明:http://www.cnblogs.com/tiantianbyconan/p/3364728.html 我前两天写过一篇博客<Android使用Fragment来 ...
- Android项目实战(十七):QQ空间实现(二)—— 分享功能 / 弹出PopupWindow
这是一张QQ空间说说详情的截图. 分析: .点击右上角三个点的图标,在界面底部弹出一个区域,这个区域有一些按钮提供给我们操作 .当该区域出现的时候,详情界面便灰了,也说成透明度变化了 .当任意选了一个 ...
- AndroidAnnotations配置--Android studio
1.引入对android-apt的依赖.在全局build.gradle中文件中添加以下代码.(Project目录下的build.gradle) repositories { mavenCentral( ...
- Android 手机卫士--九宫格使用
本文地址:http://www.cnblogs.com/wuyudong/p/5907736.html,转载请注明源地址. 采用GridView来实现,和ListView使用方式类似,列数(3列) 首 ...
- Android 利用内容观察者实现短信窃听
<Android 内容观察者的原理>中介绍了内容观察者的一些基本原理,并做了简单的实战,本文接着进一步做一个小项目实战 package com.wuyudong.smslistener; ...
- Mac系统如何编辑hosts文件
Mac系统如何编辑hosts文件 Hosts 是一个没有扩展名的系统文件,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系 统会首先 ...
- 基于ZooKeeper的Dubbo注册中心
SOA服务治理 dubbo_zk 服务总线 感兴趣的M我微信:wonter 微信扫描,人人 CTO 大本营 基于SOA架构的TDD测试驱动开发模式 服务治理要先于SOA 简述我的SOA服务治理 从页面 ...
- 《AngularJS高级程序设计》学习笔记
一.AngularJS应用剖析 AngularJS存在一些最主要的构件,如模型,视图和控制器.但AngularJS中也有许多其他可供灵活使用的部件,包括模块,指令,过滤器,工厂和服务. 一 . 1 ...
- lumen Console Commands
1.在app->Console->Commands中新增类 继承 Illuminate\Console\Command <?php namespace App\Console\Co ...