zoukankan      html  css  js  c++  java
  • sphinx实时更新

    1 创建一个表【保存已经创建好的商品的最大ID】-》能够根据这个ID找出哪些商品还没创建索引

    每次创建好索引之后把最大的ID存进去,定期取出新的商品创建索引,创建完新的索引之后再把最大的ID更新到这个表

    /************sphinx表***********/
    drop table if exists p40_sphinx_id;
    create table p40__sphinx_id
    (
    id mediumint unsigned not null default '0' comment '已经建好索引的最后一件商品的ID'
    )engine=InnoDB default charset=utf8 comment 'sphinx';

    insert into p40_sphinx_id values(0);

     2 修改sphinx的配置文件

     2.1 创建好索引之后把已经建好的最后的商品ID更新到这个表

    #MySQL数据源配置,详情请查看:http://www.coreseek.cn/products-install/mysql/
    #请先将var/test/documents.sql导入数据库,并配置好以下的MySQL用户密码数据库
    #为数据库中的表p40_goods表 为数据源
    #源定义
    source goods
    {
    type = mysql

    sql_host = localhost
    sql_user = root
    sql_pass =
    sql_db = php40
    sql_port = 3306
    sql_query_pre = SET NAMES utf8
    #主查询:要为哪些数据建索引就使用一条SQL语句把这些数据取出来即可
    #要求:第一个字段一定是ID
    #现在这个SQL的意思是让SPHINX为所有商品的:goods_name,goods_decs,attr_value这三个字段创建全文索引

    sql_query = SELECT a.id,a.goods_name,a.goods_desc,GROUP_CONCAT(b.attr_value) attr_value from p40_goods a LEFT JOIN p40_goods_attr b ON a.id=b.goods_id GROUP BY a.id
    #在创建好索引之后把最后一个商品ID更新到这个表
    sql_query_post =UODATE P40_sphinx_id set id=(select max(id) from p30_goods where is_on_sale='是')
    }

    建好之后就把ID更新到表中了

    3 修改配置文件后添加的还没有创建索引的数据生成一个增量索引


    #后添加的还没有索引的数据 的数据源
    source goods_new
    {
    type = mysql

    sql_host = localhost
    sql_user = root
    sql_pass =
    sql_db = php40
    sql_port = 3306
    sql_query_pre = SET NAMES utf8
    #主查询:要为哪些数据建索引就使用一条SQL语句把这些数据取出来即可
    #要求:第一个字段一定是ID
    #取出后添加的还没有索引的数据
    sql_query = SELECT a.id,a.goods_name,a.goods_desc,GROUP_CONCAT(b.attr_value) attr_value from p40_goods a LEFT JOIN p40_goods_attr b ON a.id=b.goods_id where a.is_on_sale='是' AND a.id > (select id from p40_sphinx_id)GROUP BY a.id
    #在创建好索引之后把最后一个商品ID更新到这个表
    sql_query_post =UODATE P40_sphinx_id set id=(select max(id) from p30_goods where is_on_sale='是')
    }
    index goods_new
    {
    source = goods_new #对应的source名称
    #生成的索引文件存放的目录
    path = D:serverapachehtdocs p p40coreseek-3.2.14-win32vardatagoods_new
    docinfo = extern
    mlock = 0
    morphology = none
    min_word_len = 1
    html_strip = 0

    #中文分词配置,详情请查看:http://www.coreseek.cn/products-install/coreseek_mmseg/
    #charset_dictpath = /usr/local/mmseg3/etc/ #BSD、Linux环境下设置,/符号结尾
    charset_dictpath = etc/ #Windows环境下设置,/符号结尾,最好给出绝对路径,例如:C:/usr/local/coreseek/etc/...
    charset_type = zh_cn.utf-8
    }

    #一个数据源对应一个index
    #定义索引文件
    index goods
    {
    source = goods #对应的source名称
    #生成的索引文件存放的目录
    path = D:serverapachehtdocs p p40coreseek-3.2.14-win32vardatagoods
    docinfo = extern
    mlock = 0
    morphology = none
    min_word_len = 1
    html_strip = 0

    #中文分词配置,详情请查看:http://www.coreseek.cn/products-install/coreseek_mmseg/
    #charset_dictpath = /usr/local/mmseg3/etc/ #BSD、Linux环境下设置,/符号结尾
    charset_dictpath = etc/ #Windows环境下设置,/符号结尾,最好给出绝对路径,例如:C:/usr/local/coreseek/etc/...
    charset_type = zh_cn.utf-8
    }

    4  写一个脚本,

      a 先为增量数据生成索引文件

     b  把 新生成的增量 的索引文件合并到主索引文件

     说明:windows:bat脚本  *.bat

              Linux: shell脚本  只有有可执行的权限就可以执行【chmod+x 文件名】

    在 根目录创建文件 以.bat结尾

    C:UserswylDocumentsczsphinxcoreseek-3.2.14-win32inindexer.exe -c C:UserswylDocumentsczsphinxcoreseek-3.2.14-win32sphinx.conf goods_del --rotate
    C:UserswylDocumentsczsphinxcoreseek-3.2.14-win32inindexer.exe -c C:UserswylDocumentsczsphinxcoreseek-3.2.14-win32sphinx.conf --merge goods goods_del --merge-dst-range is_updated 0 0 --rotate


    C:UserswylDocumentsczsphinxcoreseek-3.2.14-win32inindexer.exe -c C:UserswylDocumentsczsphinxcoreseek-3.2.14-win32sphinx.conf goods_new --rotate
    C:UserswylDocumentsczsphinxcoreseek-3.2.14-win32inindexer.exe -c C:UserswylDocumentsczsphinxcoreseek-3.2.14-win32sphinx.conf --merge goods goods_new --rotate

    配置脚本每隔5分钟自动执行一次

     说明:windows:管理工具->任务计划

           控制面板-》管理工具-》任务计划程序-》点击右侧 -创建基本任务-》填写基本任务名称(自动更新sphinx)-》描述(每隔5分钟自动更新)-》下一步(每天)-》启动程序-》填写任务文件地址-》完成

             linux:crond 进程

    世上无难事,只怕有心人......
  • 相关阅读:
    C# 动态创建SQL数据库(一)
    在Winform中菜单动态添加“最近使用文件”
    转(C# 类似右键菜单弹出窗体)
    为什么不能用Abort退出线程
    C# GDI绘制波形图
    转(C# 实现生产者消费者队列)
    为字段设置初始值
    闲话资源管理
    正确使用 new 修饰符
    减少装箱与拆箱
  • 原文地址:https://www.cnblogs.com/gooderic/p/5816371.html
Copyright © 2011-2022 走看看