zoukankan      html  css  js  c++  java
  • Coreseek:部门查询和增量索引代替实时索引

    1.行业调查

    索引系统需要通过主查询来获取所有的文档信息,一个简单的实现是整个表的数据到内存,但是这可能会导致整个表被锁定,并且使其它操作被阻止(例如:在MyISAM格款式上INSERT操作)。同时,会浪费大量的内存来存储查询结果。喜欢它的问题。 为了避免出现这样的情况。CoreSeek/Sphinx支持一种被称为 区段查询的技术. 首先,CoreSeek/Sphinx从数据库中取出文档ID的最小值和最大值。将由最大值和最小值定义自然数区间分成若干份,一次获取数据。建立索引。现举比例如以下:

    sql_query_range	= SELECT MIN(id),MAX(id) FROM documents
    sql_range_step = 1000
    sql_query = SELECT * FROM documents WHERE id>=$start AND id<=$end
    仅仅要在配置文件中面写三条语句就可以

    from后面要跟的是你数据库里面的表名,如这里的表就是document

    2.增量索引取代实时索引

    有这么一种常见的情况:整个数据集很大,以至于难于常常性的重建索引,可是每次新增的记录却相当地少。一个典型的样例是:一个论坛有1000000个已经归档的帖子,但每天仅仅有1000个新帖子。

    在这样的情况下能够用所谓的“主索引+增量索引”(main+delta)模式来实现“近实时”的索引更新。

    这样的方法的基本思路是设置两个数据源和两个索引,对非常少更新或根本不更新的数据建立主索引。而对新增文档建立增量索引。在上述样例中,那1000000个已经归档的帖子放在主索引中,而每天新增的1000个帖子则放在增量索引中。增量索引更新的频率能够非常快,而文档能够在出现几分种内就能够被检索到。

    确定详细某一文档的分属那个索引的分类工作能够自己主动完毕。

    一个可选的方案是,建立一个计数表,记录将文档集分成两部分的那个文档ID,而每次又一次构建主索引时,这个表都会被更新。

    分辨要在mysql里建表,然后改动配置文件

    # in MySQL
    CREATE TABLE sph_counter
    (
        counter_id INTEGER PRIMARY KEY NOT NULL,
        max_doc_id INTEGER NOT NULL
    );
    
    # in sphinx.conf
    source main
    {
        # ...
        sql_query_pre = SET NAMES utf8
        sql_query_pre = REPLACE INTO sph_counter SELECT 1, MAX(id) FROM documents
        sql_query = SELECT id, title, body FROM documents 
            WHERE id<span style="color:#ff0000;"><=</span>( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )
    }
    
    source delta : main
    {
        sql_query_pre = SET NAMES utf8
        sql_query = SELECT id, title, body FROM documents 
            WHERE id<span style="color:#ff0000;">></span>( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )
    }
    
    index main
    {
        source = main
        path = /path/to/main
        # ... all the other settings
    }
    
    # note how all other settings are copied from main,
    # but source and path are overridden (they MUST be)
    index delta : main
    {
        source = delta
        path = /path/to/delta
    }

    写好之后,还要写两个批处理文件,一个做增量索引。一个合并索引。

    增量索引:g:/service/coreseek/bin/indexer  -c g:/service/coreseek/etc/csft_mysql.conf   --rotate main_delta

    合并索引:g:/service/coreseek/bin/indexer  -c g:/service/coreseek/etc/csft_mysql.conf  --merge main main_delta --rotate 

    写完后。既然后把该任务计划,几乎是同一5几分钟做一个增量索引,每天1有一半的时间做一个主索引

  • 相关阅读:
    Feature fake , new view in comment.
    MeeGo Architect
    小米手机 怪诞行为经济学
    [转载]ten years as a programmer
    C++ 头文件
    关于AGILE/TDD 和传统的design
    你是否在开发正确的产品
    正确的创业
    MeeGo架构
    Unit Test
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4600215.html
Copyright © 2011-2022 走看看