sphinx随笔记了一下
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随笔记了一下的更多相关文章
- Sphinx学习笔记2
因为网站搜索的需要,启动了一个搜索引擎项目,其实也算不上完整的搜索引擎,需求很简单,如下: 1)搜索产品名.类别名.品牌名.副标题.关键字等字段 2)数据量目前为13000左右,未来可 ...
- Sphinx学习笔记(一)
最近负责一个项目,需要用到全文检索,我的环境大体如下: 1.数据保存在MySQL中 2.需要支持中文检索 3.尽可能的简单 选择了Sphinx,至于solr和E ...
- sphinx搜索 笔记
架构图: 安装sphinx,见文章http://my.oschina.net/ptk/blog/495435 sphinx关键的配置文件.在里面写查询的sql. 两个关键命令:indexer生成查询索 ...
- 小白的linux笔记11:放弃gitbook,转战Sphinx
gitbook生成的html目录不折叠且链接失效 装好了gitbook和nodejs,本以为可以安心的做电子书了. 谁想到gitbook慢的一P,而且导出来的html目录不折叠,最关键的是链接有问题, ...
- 【转】 文档与笔记利器 reStructuredText 和 Sphinx
关于制作文档和笔记这种事,我已经纠结了很久,网上解决方案也一大推,我试过几样,ScrapBook 和 Zotero,编辑不太方便,同步麻烦.Google Note 过于格式简单,现在也不更新了,Goo ...
- sphinx笔记
sphinx笔记 下载中文版coreseek包 1:解压后,将etc下的mysql.conf文件复制一份放到上级目录下,改名为sphinx.conf 2:配置文件: 2.1:source配置数据源 s ...
- sphinx通过增量索引实现近实时更新
一.sphinx增量索引实现近实时更新设置 数据库中的已有数据很大,又不断有新数据加入到数据库中,也希望能够检索到.全部重新建立索引很消耗资源,因为我们需要更新的数据相比较而言很少. 例如.原来的数据 ...
- coreseek (sphinx)+ Mysql + Thinkphp搭建中文搜索引擎详解
一, 前言 1,研究coreseek的动机 我有一个自己的笔记博客,经常在上面做一些技术文章分析.在查询一些文章的时候,以前只能将要查询的内容去mysql中用like模糊匹配.在文章多了的情 ...
- sphinx 增量索引 实现近实时更新
一.sphinx增量索引的设置 数据库中的已有数据很大,又不断有新数据加入到数据库中,也希望能够检索到.全部重新建立索引很消耗资源,因为我们需要更新的数据相比较而言很少.例如.原来的数据有几百万条 ...
随机推荐
- co 模块
1.co 模块,它基于 ES6 的 generator 和 yield ,让我们能用同步的形式编写异步代码. 2.co 模块是能让我们以同步的形式编写异步代码的 nodejs 模块 3.学习网络地址: ...
- TCP服务通讯
一.TCP 1.TCP又叫做套接字,传输安全,速度慢. TCP和UTP是网络的传输协议,跟java没什么关系,没有说用java做的客户端必须连接java做的服务器,我们可以用c和c++做客户端,直接连 ...
- documentsUI源码分析
documentsUI源码分析 本文基于Android 6.0的源码,来分析documentsUI模块. 原本基于7.1源码看了两天,但是Android 7.1与6.0中documentsUI模块差异 ...
- Spring AOP 和 动态代理技术
AOP 是什么东西 首先来说 AOP 并不是 Spring 框架的核心技术之一,AOP 全称 Aspect Orient Programming,即面向切面的编程.其要解决的问题就是在不改变源代码的情 ...
- [luogu]P1379 八数码难题[广度优先搜索]
八数码难题 ——!x^n+y^n=z^n 我在此只说明此题的一种用BFS的方法,因为本人也是初学,勉勉强强写了一个单向的BFS,据说最快的是IDA*(然而蒟蒻我不会…) 各位如果想用IDA*的可以看看 ...
- 初次配置git与github出现push不了的问题
ssh: connect to host gmail.com port 22: No route to host fatal: Could not read from remote repositor ...
- java内存区域——深入理解JVM读书笔记
本内容由<深入理解java虚拟机>的部分读书笔记整理而成,本读者计划连载. 通过如下图和文字介绍来了解几个运行时数据区的概念. 方法区:它是各个线程共享的区域,用于内存已被VM加载的类信息 ...
- MyBatis 详解(一对一,一对多,多对多)
1.什么是MyBatis? MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且 ...
- 五. Java集合概要
了解了Java内存相关的内容后,现在来简单介绍下Java的集合. Set:不含有重复数据的集合.常用的对象HashSet,TreeSet,LinkedHashSet.HashSet拥有很好的性能,其数 ...
- RobotFramework自动化测试框架的基础关键字(四)
1.1.1 如何使用for循环 不管在哪种编程语言中,for循环都是必不可少的,在Robot Framework中,我们也可以使用for循环来做遍历处理. 我们用for循环对一个列表进行 ...