sphinx笔记

下载中文版coreseek包

1:解压后,将etc下的mysql。conf文件复制一份放到上级目录下,改名为sphinx。conf

2:配置文件:

2.1:source配置数据源

source goods

你要为那些数据建索引,比如,为php39数据库中的p39—goods表为数据源

sql_db = php39

sql_query 主查询,为那些数据建索引,就用一条语句他她们取出来 例如:select id, name,title from table   为这三个字段减索引

知识点:group_concat()  mysql函数

测试语句:SELECT group_concat(town) FROM `players` group by town

结果去查找town中去查找哪些值是一样的,如果相等,就全部列出来,以逗号分割进行列出,如下:

2.2:index 索引文件

一个数据源对应一个index

定义索引文件

index goods

{

source  = goods

生成的索引文件存放的目录注意,最后的goods是文件名叫goods 不是goods目录下

path = c:\****\goods

}

2.3:数据库配置

创建索引:

配置完成后,打开cmd  进入bin下降indexer。exe拉近cmd里来

*****。exe -c ****\sphinx.conf(这里是配置的那个路径)  goods -》 指的是哪一个数据源

回车就行,到此这个索引就建完了

安装并启动sphinx服务器

打开cmd 使用bin文件夹下的serchd。exe命令 拖入cmd中去

*** -c 配置的路径***\sphinx.conf --install

安装服务窗口中找到sphinx并启动

安装玩的那个窗口中输入services.msc即可

在本地服务窗口中可找到searchd这个服务,说明启动成功

项目中使用这个sphinx查询

A:将sphinx.api.php复制进项目中---放到根目录下就行

B:在控制器中使用php操作他

function keyserch(){

$key = I($key);

require('./sphinxapi.php');引入这个类文件,他是用来操作sphinx的类文件,调用它里面的方法用就行,不会的百度sphinxapi里的方法,手册有介绍

$sph = new \sphinxclient();

$sph = setserver('localhost',9312);连接服务器9312 是sphx的固定端口

$sph = query($key,goods);第一个参数是查询那个关键字,第二个参数是从那个索引文件里查询搜索,{ 指的是索引的名字 },这里是只index goods这里定义的这个

在牛逼一点的功能:

实时索引更新:个人理解  主索引+临时索引(增量索引) 来实现类似于实时更新的效果,原理是,为新数据生成个小的临时的索引文件,然后将索引文件合并到主索引文件中去

a:先给他建一个主索引,从这些索引文件中,查询出一个最大的商品id来 新建一个数据表,将这个最大的商品的id update存到这个表中

b:然后每次新添加的商品,因为不会自动建立索引,所以他们的id不会再索引文件中,他们的商品的id肯定比索引中的保存的最大的商品id要大

c: 然后给新添加的商品新建一个索引,按照上述方法,source goods数据源复制一份,改为 source goods_new 作为新索引数据源

index goods索引文件复制一份,改为index  goods_new  作为新索引的名字

然后合并主索引

修改sphx配置文件:新建一个数据表叫spinx_xin  字段为id

source goods

{

type=**

****

sql_query = select *****from p39_goods   建立的索引文件,此时为主索引

# 在创建好索引后吧最后一个商品的id更新到新建的表中:

$sql_query_post = update spinx_xin set id= (select max(id) from p39_goods )

}

测试一下:重新创建一下索引即可看到效果 注意:重建索引需在本地服务中心关闭search的这个sphinx服务  然后执行services.msc在启动 然后输入建立索引命令即可

新建索引不关闭服务器也行,在建索引命令后面加上 --rotate这个命令即可

执行完命令后就把id更新到表中了

注意:这里只是把索引的文件的商品id更新到了新表中,新的商品还没有索引

接下来就是给新商品新建索引,然后把它每过一段时间,合并到主索引中

复制source goods 为goods_new

修改索引的sql语句

source goods_new

{

******

****

*****

新商品id肯定大于索引中最大的商品的id,

因为已将最大的id存在spinx_xin  新表的id中

只要比较商品表中比这个新表的id大的就是新商品

修改sql语句,目的是查询出新商品,然后给新商品建索引

sql_query = select id ****from p39_goods  where  id>(select id from spinx_xin  )

******

}

同理新建了一个数据源就得新建一个index索引文件

复制一份index goods 索引文件在做相应的修改,新的索引就好了

写一个脚本,bat文件,目的有两个,

先给增量数据生成索引文件

把新生成的索引文件合并到主索引中

bat中写入建立索引的语句:

1:建立新的索引文件

****index.exe -c  ***\sphinx.conf(路径) goods_new

2:合并索引新索引文件到主索引文件中

****indexer.exe -c ***\sphinx.conf  --merge  goods   goods_new   --rotate   (这里别忘了写rotate相当于,自动关闭sghinx服务器建索引自动打开,上文有提到)

然后执行脚本文件

但是每次添加商品手动执行这个脚本更新索引,太麻烦了,所以还要配置一下这个脚本,让他自动每五分钟执行一次

window:管理工具--任务计划   设置五分钟自动执行脚本

linux:crond进程

sphinx笔记的更多相关文章

  1. sphinx随笔记了一下

    sphinx笔记 一:下载中文版coreseek包1:解压后,将etc下的mysql.conf文件复制一份放到上级目录下,改名为sphinx.conf2:配置文件: 2.1:source配置数据源so ...

  2. 【转】 文档与笔记利器 reStructuredText 和 Sphinx

    关于制作文档和笔记这种事,我已经纠结了很久,网上解决方案也一大推,我试过几样,ScrapBook 和 Zotero,编辑不太方便,同步麻烦.Google Note 过于格式简单,现在也不更新了,Goo ...

  3. 小白的linux笔记11:放弃gitbook,转战Sphinx

    gitbook生成的html目录不折叠且链接失效 装好了gitbook和nodejs,本以为可以安心的做电子书了. 谁想到gitbook慢的一P,而且导出来的html目录不折叠,最关键的是链接有问题, ...

  4. Sphinx学习笔记2

    因为网站搜索的需要,启动了一个搜索引擎项目,其实也算不上完整的搜索引擎,需求很简单,如下:     1)搜索产品名.类别名.品牌名.副标题.关键字等字段     2)数据量目前为13000左右,未来可 ...

  5. Sphinx学习笔记(一)

    最近负责一个项目,需要用到全文检索,我的环境大体如下:       1.数据保存在MySQL中     2.需要支持中文检索     3.尽可能的简单       选择了Sphinx,至于solr和E ...

  6. sphinx搜索 笔记

    架构图: 安装sphinx,见文章http://my.oschina.net/ptk/blog/495435 sphinx关键的配置文件.在里面写查询的sql. 两个关键命令:indexer生成查询索 ...

  7. sphinx通过增量索引实现近实时更新

    一.sphinx增量索引实现近实时更新设置 数据库中的已有数据很大,又不断有新数据加入到数据库中,也希望能够检索到.全部重新建立索引很消耗资源,因为我们需要更新的数据相比较而言很少. 例如.原来的数据 ...

  8. coreseek (sphinx)+ Mysql + Thinkphp搭建中文搜索引擎详解

      一, 前言    1,研究coreseek的动机 我有一个自己的笔记博客,经常在上面做一些技术文章分析.在查询一些文章的时候,以前只能将要查询的内容去mysql中用like模糊匹配.在文章多了的情 ...

  9. sphinx 增量索引 实现近实时更新

    一.sphinx增量索引的设置   数据库中的已有数据很大,又不断有新数据加入到数据库中,也希望能够检索到.全部重新建立索引很消耗资源,因为我们需要更新的数据相比较而言很少.例如.原来的数据有几百万条 ...

随机推荐

  1. 手动部署LNMT(Nginx+Tomcat)并实现Nginx反向代理Tomcat

    一.什么是Tomcat? 在弄清楚Tomcat之前要先了解什么是J2EE:从整体上讲,J2EE 是使用 Java 技术开发企业级应用的工业标准,它是 Java 技术不断适应和促进企业级应用过程中的产物 ...

  2. dom操作------获取长/宽/距离等值的若干方法

    1.offsetLeft:获取元素边框以外至文档顶的距离:若其祖先元素有定位属性position则返回值为元素到该定位元素的距离,不包括祖先元素的三宽(padding,border,margin),且 ...

  3. c#实战开发:用.net core开发一个简单的Web以太坊钱包 (六)

    今天就来开发一个C# 版的简易钱包 先回顾以前的内容 c#实战开发:以太坊Geth 命令发布智能合约 (五) c#实战开发:以太坊Geth 常用命令 (四) c#实战开发:以太坊钱包快速同步区块和钱包 ...

  4. IdentityServer4-客户端定义-翻译

    客户端定义(Defining Client) 客户端可以从你的IDS服务器请求tokens. 通常,客户端需要遵循下面的通用设置: 一个唯一的Client ID 如果需要还可以提供密码 允许与toke ...

  5. 6.分析request_irq和free_irq函数如何注册注销中断(详解)

    上一节讲了如何实现运行中断,这些都是系统给做好的,当我们想自己写个中断处理程序,去执行自己的代码,就需要写irq_desc->action->handler,然后通过request_irq ...

  6. Spring中四种实例化bean的方式

    本文主要介绍四种实例化bean的方式(注入方式) 或者叫依赖对象实例化的四种方式.上面的程序,创建bean 对象,用的是什么方法 ,用的是构造函数的方式 (Spring 可以在构造函数私有化的情况下把 ...

  7. The Maze Makers(csu1566)

    1566: The Maze Makers Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 90  Solved: 33[Submit][Status][ ...

  8. blfs(systemv版本)学习笔记-编译安装配置dhcpcd

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! dhcpcd项目地址:http://www.linuxfromscratch.org/blfs/view/8.3/basicne ...

  9. SOA、SOAP、RFC、RPC、IETF

    SOA: 全称:Servuce - oriented Architecture 说明:面向服务架构 就是说将软件按照功能设计成一个个服务,这些服务用标准的方式定义接口.并通过标准的协议进行调用. SO ...

  10. 【代码笔记】Web-ionic-创建APP的架构

    一,创建app的时候,index.html的主要架构. <!DOCTYPE html> <html> <head> <meta charset="u ...