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. WinForm-GridView

    前端: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="CKXM.aspx. ...

  2. Linux机器24项安全合规设置

    工作的一些内容,这是中国移动集团当前linux机器安全合规标准,找了点时间将其归类,并查了一些资料,每项配置是什么意思,不仅要知其然,还要知其所以然.好记性不如烂笔头. 1.  检查FTP配置-限制用 ...

  3. SQLLDR 教程

      )- 总览     http://blog.csdn.net/dbanote/article/details/9153895 )- 命令行参数 http://blog.csdn.net/dbano ...

  4. XMPP学习——2、用户登录

    最近在学习XMPP的使用,打算完成一个完整较为完整地Demo示例,通过这个示例掌握xmpp的使用与开发.同时打算在这个示例中学习使用一下其他的开源类库,在此作为记录学习. 包括服务器端--Openfi ...

  5. UITableView增加和删除、移动

    复习一下: 1.在控制器上添加一个UITableView,  暂时该UITableView控件变量名命名为为tableView, 设置控件代理,实现控制器的UITableViewDataSource, ...

  6. Android Studio简单设置

    IDE外观&行为 修改主题,修改全局字体 修改主题,想用炫酷的深色主题,就改成Darcula吧:字体的话,选一个带中文的,要不然会有很多口口,我这里用Microsoft YaHei UI,很不 ...

  7. Android 短信的还原

    上篇文章讲到<Android 短信的备份>,本文主要实现Android 短信的还原,即是将一条 布局文件: <RelativeLayout xmlns:android="h ...

  8. iOS 学习 - 14.本地联系人

    苹果在iOS9的SDK中废除了AddressBookUI.framework的一些功能(是不是这个库都废除了,有待验证),具体和保存联系人相关的几个系统界面如下:联系人选择:AddressBookUI ...

  9. HTTP和GET/POST请求(NSURLConnection)

    网络编程 网络编程是一种实时更新应用数据的常用手段 网络编程是开发优秀网络应用的前提和基础 网络基本概念 客户端(就是手机或者ipad等手持设备上面的APP) 服务器(远程服务器-本地服务器) 请求( ...

  10. Asp.net中实现同一用户名不能同时登录(单点登录)

    Web 项目中经常遇到的问题就是同一用户名多次登录的问题,相应的解决办法也很多,总结起来不外乎这几种解决办法: 将登录后的用户名放到数据库表中: 登录后的用户名放到Session中: 登录后的用户名放 ...