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检索引擎的更多相关文章

  1. sphinx中文版Coreseek中文检索引擎安装和使用方法(Linux)

    sphinx中文版Coreseek中文检索引擎安装和使用方法(Linux)     众所周知,在MYSQL数据库中,如果你在百万级别数据库中使用 like 的话那你一定在那骂娘,coreseek是一个 ...

  2. Coreseek + Sphinx + Mysql + PHP构建中文检索引擎

    首先明确几个概念 Sphinx是开源的搜索引擎,它支持英文的全文检索.所以如果单独搭建Sphinx,你就已经可以使用全文索引了.但是往往我们要求的是中文索引,怎么做呢?国人提供了一个可供企业使用的,基 ...

  3. Linux下PHP+MySQL+CoreSeek中文检索引擎配置

    说明: 操作系统:CentOS 5.X 服务器IP地址:192.168.21.127 Web环境:Nginx+PHP+MySQL 站点根目录:/usr/local/nginx/html 目的:安装co ...

  4. CoreSeek中文检索引擎

    目的:安装coreseek中文检索引擎,配置MySQL数据库访问接口,使用PHP程序实现中文检索. CoreSeek官方网站: http://www.coreseek.cn/ http://www.c ...

  5. Sphinx与coreseek

    Sphinx : 高性能SQL全文检索引擎 分类 编程技术 Sphinx是一款基于SQL的高性能全文检索引擎,Sphinx的性能在众多全文检索引擎中也是数一数二的,利用Sphinx,我们可以完成比数据 ...

  6. 【Java】Lucene检索引擎详解

    基于Java的全文索引/检索引擎——Lucene Lucene不是一个完整的全文索引应用,而是是一个用Java写的全文索引引擎工具包,它可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能. L ...

  7. sphinx和coreseek

    sphinx是国外的一款搜索软件. coreseek是在sphinx的基础上,增加了中文分词功能,换句话说,就是支持了中文. Coreseek发布了3.2.14版本和4.1版本,其中的3.2.14版本 ...

  8. ubuntu-10.04的测试环境 安装测试 Coreseek开源中文检索引擎-Sphinx中文版

    主要参考文档:http://www.coreseek.cn/products-install/install_on_bsd_linux/ 一. 32位版本: coreseek安装需要预装的软件: ap ...

  9. 【整理】Linux下中文检索引擎coreseek4安装,以及PHP使用sphinx的三种方式(sphinxapi,sphinx的php扩展,SphinxSe作为mysql存储引擎)

          一,软件准备 coreseek4.1 (包含coreseek测试版和mmseg最新版本,以及测试数据包[内置中文分词与搜索.单字切分.mysql数据源.python数据源.RT实时索引等测 ...

随机推荐

  1. FOR ALL ENTRIES IN 与 INNER JOIN 写在一个SQL上影响效率

    SELECT likp~vbeln likp~lfart lips~werks likp~kunnr INTO CORRESPONDING FIELDS OF TABLE it_likps FROM ...

  2. Iphone 英语语言下通讯录排序问题

    Iphone 如果把界面语言设置成English,那么通讯录默认排序是通过拼音来排的,如果联系人信息中没有设置名字的拼音,那么这些联系人都会被放到#中. 批量添加拼音的解决方案: https://gi ...

  3. Android 学习资料收集

    收集整理这份资料灵感来自于 trip_to_iOS, 征得同意引用了该资料的开头描述 收集整理这份资料主要帮助初学者学习 Android 开发, 希望能快速帮助到他们快速入门, 找到适合自己学习资料, ...

  4. (视频) 《快速创建网站》 3.2 WordPress多站点及Azure在线代码编辑器 - 扔掉你的ftp工具吧,修改代码全部云端搞定

    本文是<快速创建网站>系列的第6篇,如果你还没有看过之前的内容,建议你点击以下目录中的章节先阅读其他内容再回到本文. 访问本系列目录,请点击:http://devopshub.cn/tag ...

  5. Ubuntu/Windows双系统修复引导

    Ubuntu/Windows双系统修复引导   首先说明:在Windows存在的前提下安装Ubuntu(或者Ubuntu系列)是不需要修复引导的.因为grub会自动搜索存在硬盘中的系统.   而在Ub ...

  6. RPM方式安装MySQL5.5.48 (Aliyun CentOS 7.0 & 卸载MySQL5.7)

    环境是阿里云的CentOS7.0,更新了yum源(更新yum源请参考https://help.aliyun.com/knowledge_detail/5974184.html)之后先是尝试安装了MyS ...

  7. Javascript之旅——第七站:说说js的调试

    最近比较吐槽,大家都知道,现在web前端相对几年前来说已经变得很重了,各种js框架,各种面对对象,而且项目多了,就会提取公共模块, 这些模块的UI展示都一样,不一样的就是后台逻辑,举个例子吧,我们做企 ...

  8. mysql截取longblob类型字段内一小块数据的方法

    由于longblob类型的字段内容一般都好大,最大限制是4G,所以在数据查询中读取一整块数据的方式是不现实的,这需要要截取的方法来获取需要的数据. 方法如下: hex(substring(A, ind ...

  9. <a>标签,鼠标经过或者停留触发延时响应事件

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAcUAAAEoCAIAAACmeX2PAAAgAElEQVR4nOzdd3xUdb74f3+Pu3v33t ...

  10. linux学习之路——ubuntu 16.04 开机开启数字小键盘解决方法

    第一步:安装numlockx,输入命令 sudo apt-get install numlockx 第二步:用 vim 打开 rc.local 文件,输入命令 sudo vim /etc/rc.loc ...