在向SQL添加数据时,Sphinx自动更新是否为索引?

时间:2011-09-27 22:40:42

标签: mysql sphinx

我很好奇Sphinx是否会在您添加新SQL数据时自动更新其索引,或者您是否必须专门告诉它重新编制数据库索引。

如果没有,有没有人有一个如何在数据库数据发生变化时自动化这个过程的例子?

3 个答案:

答案 0 :(得分:3)

答案是否定的,您需要告诉sphinx重新编制数据库索引。

您需要了解一些步骤和要求:

  1. 主要和delta是要求
  2. 首先,您需要索引主索引。
  3. 第一次运行后,您可以通过旋转来索引delta(以确保服务正在运行,并且当时可以使用Web上的数据)
  4. 在进一步开始之前,您需要创建一个表来标记“最后编入索引的行”。最后一个索引行ID可用于下一个索引增量并将delta合并为main。
  5. 您需要将delta索引合并到主索引。   在狮身人面像文件http://sphinxsearch.com/docs/current.html#index-merging
  6. 重启sphinx服务。

    提示:创建自己的程序,可以使用C#或其他语言执行索引。您可以尝试Windows的任务计划也可以。

  7. 这是我的conf:

    source Main
    {
    type            = mysql
    
    sql_host        = localhost
    sql_user        = root
    sql_pass        = password
    sql_db          = table1
    sql_port        = 3306  # optional, default is 3306
    sql_query_pre = REPLACE INTO table1.sph_counter SELECT 1, MAX(PageID) FROM table1.pages;
    sql_query       = \
        SELECT  pd.`PageID`, pd.Status from table1.pages pd
        WHERE pd.PageID>=$start AND pd.PageID<=$end \
        GROUP BY pd.`PageID`
    
    sql_attr_uint       = Status
    
    sql_query_info      = SELECT * FROM table1.`pages` pd WHERE pd.`PageID`=$id
    sql_query_range     = SELECT MIN(PageID),MAX(PageID)\
                  FROM tabl1.`pages`
    sql_range_step      = 1000000
    }
    
    
    source Delta : Main
    {
    sql_query_pre = SET NAMES utf8
    
    sql_query = \
        SELECT  PageID, Status from pages \
        WHERE PageID>=$start AND PageID<=$end 
    
    sql_attr_uint       = Status
    
    sql_query_info      = SELECT * FROM table1.`pages` pd WHERE pd.`PageID`=$id
    sql_query_range     = SELECT (SELECT MaxDoc FROM table1.sph_counter WHERE ID = 1) MinDoc,MAX(PageID) FROM table1.`pages`;
    sql_range_step      = 1000000
    }
    
    
    index Main
    {
    source          = Main
    path            = C:/sphinx/data/Main
    docinfo         = extern
    charset_type        = utf-8
    }
    
    
    index Delta : Main
    {
        source = Delta
    path = C:/sphinx/data/Delta
    charset_type = utf-8
    }
    

答案 1 :(得分:2)

sphinx documentation part about real-time indexes

中找到
  

实时索引(或简称为RT索引)是一个新的后端,允许您动态插入,更新或删除文档(行)。

因此,要动态更新索引,您只需要进行类似

的查询
{INSERT | REPLACE} INTO index [(column, ...)]
VALUES (value, ...)
[, (...)]

答案 2 :(得分:2)

要扩展Anne的答案 - 如果您使用的是SQL索引,它将不会自动更新。您可以在每次更改后管理重新索引的过程 - 但这可能很昂贵。解决这个问题的一种方法是使用包含所有内容的核心索引,然后使用具有相同结构的delta索引来仅对更改进行索引(这可以通过布尔值或时间戳列来完成)。

这样,您可以在超常规的基础上重新索引delta索引(更小,从而更快),然后更少定期地处理核心和delta(但仍然,最好每天至少执行一次) )。

但是否则,新的RT索引值得关注 - 您仍然需要自己更新内容,并且它与数据库无关,因此它是一种不同的心态。另外:RT索引没有SQL索引所具有的所有功能,因此您需要确定哪些更重要。