• sphinx续5-主索引增量索引和实时索引


    在数据库数据非常庞大的时候,而且实时有新的数据插入,如果我们不更新索引,新的数据就search不到,全部重新建立索引又很消耗资源,在这种情况下我们就需要使用主索引+增量索引的思路来实现实时更新的功能。

    因为这时我们有了主索引和增量索引,主索引只需在每天凌晨更新,而增量索引的更新频率设置的很短,这样用户在搜索的时候,可以同时在这两个索引里查找。

     

    首先创建一个计数器:

    1.先在mysql中插入一个计数表

    CREATE TABLE sph_counter(

    counter_id INTEGER PRIMARY KEY NOT NULL,

    max_doc_id INTEGER NOT NULL

    );

    2.再次修改配置文件,在主数据源里面我们要改预查询语句:

    Vi  /usr/local/coreseek/etc/csft.conf

    source main{

    sql_query_pre = SET NAMES utf8

    sql_query_pre = SET SESSION query_cache_type=OFF

    sql_query_pre = REPLACE INTO sph_counter SELECT 1, MAX(id) FROM documents

    sql_query = SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content FROM documents /

    WHERE id<=( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )

    … //其他可以默认

    }

    source delta : main //继承数据源

    {

    sql_query_pre = SET NAMES utf8

    sql_query_pre = SET SESSION query_cache_type=OFF

    sql_query_pre =

       sql_query = SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content FROM documents /

    WHERE id>( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )

    }

    index mian //主索引

    {

    source = main

    Path=/usr/local/coreseek/var/data/main

    }

    index delta : main //增量索引

    {

    source = delta 

    Path=/usr/local/coreseek/var/data/delta

    }

    3.重建增量索引

    /usr/local/coreseek/bin/indexer -c  /usr/local/coreseek/etc/csft.conf  delta

    用/usr/local/coreseek/bin/search工具来检索,查询主索引中检索结果为0,而新数据库在增量索引中检索到。

    4.实时更新索引

    2shell脚本,一个主索引脚本、一个增量索引脚本

    Vi  main.sh

    #!/bin/sh

    /usr/local/coreseek/bin/indexer main –c  /usr/local/coreseek/etc/csft.conf >> /usr/local/coreseek/var/log/main.log

    Vi   delta.sh

    #!/bin/sh

    /usr/local/coreseek/bin/indexer delta –c  /usr/local/coreseek/etc/csft.conf –rotate>> /usr/local/coreseek/var/log/delta.log

    加入到计划任务里面:每5分钟重新增量索引;每天凌晨2点重建主索引

    */5 * * * * /usr/local/coreseek/etc/delta.sh > /dev/null 2>&1

    0 2 * * * /usr/local/coreseek/etc/main.sh > /dev/null 2>&1

  • 相关阅读:
    How to use django with mod_wsgi ¶
    How to install Apache2 (CentOS 5.4)
    Review Board
    代理
    你的第一个Javascript服务器端程序(一)
    程序员的十层楼(6~7层)
    用你自己的插件扩展jQuery(Extend jQuery with Your Very Own Plugin)
    程序员的十层楼(1~5层)
    C#到Java byte类型冲突的解决
    Hadoop出现allocate memory错误的解决
  • 原文地址:https://www.cnblogs.com/UnGeek/p/6280033.html
Copyright © 2020-2023  润新知