• 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进程

  • 相关阅读:
    高通Android分区表详解
    LC 871. Minimum Number of Refueling Stops 【lock, hard】
    LC 265. Paint House II
    Horovod 通信策略
    LC 351. Android Unlock Patterns
    LC 957. Prison Cells After N Days
    解析java泛型(二)
    解析java泛型(一)
    全面理解java异常机制
    java基础之继承(二)
  • 原文地址:https://www.cnblogs.com/yszr/p/8120364.html
Copyright © 2020-2023  润新知