Sphinx搜索引擎,几个快速问题

3 indexing search sphinx

所以,我刚刚开始阅读这篇文章,我以前从未在PHP中实现过搜索.我有几个问题,我想知道:

  • 通过事物的声音,Sphinx需要一个"守护进程",一个在后台运行的程序来运行?
  • 假设我构建了mySQL表的索引,然后用户上传了另一条记录.为了显示此记录的搜索,每次用户更新/创建记录时,我是否必须反复构建索引?

谢谢.

Ian*_*Ian 5

基本上你需要一个基本索引然后是一个delta索引.增量更新基础中的任何内容.因此,您可以在凌晨1点运行基本索引,然后每隔5分钟更新一次增量.您将时间戳存储在表或其他数据库中,并控制哪些记录在增量中.

然后,您可以查看sql_query_killlist以删除已删除的内容,请参阅文档.

一个示例conf可能看起来像这样.

source _user
{
    type = mysql
    sql_host = localhost
    sql_user = root
    sql_pass =
    sql_db = db
    sql_port = 3306
    sql_attr_uint = category_id
    sql_attr_timestamp = time_posted
}

source user_base : _user
{
    sql_query_pre = REPLACE INTO sphinx_lastrun (object_name, object_value) SELECT 'users', @max_stamp:=UNIX_TIMESTAMP(MAX(stamp))-1 FROM users
    sql_query = SELECT id, category_id, name, UNIX_TIMESTAMP(stamp) AS stamp FROM users WHERE stamp < FROM_UNIXTIME(@max_stamp)
    sql_query_info = SELECT id FROM users WHERE id=$id  
}

source user_incr : _user
{
    sql_query = SELECT id, category_id, name, UNIX_TIMESTAMP(stamp) AS stamp FROM users WHERE stamp >= (SELECT FROM_UNIXTIME(object_value) FROM sphinx_lastrun WHERE object_name = 'users')

    # You'll need sql_query_killlist to get rid of stuff that is deleted. See the docs

    sql_query_info = SELECT id FROM users WHERE id=$id      
}

index _user
{
    docinfo = extern
    mlock = 0
    morphology = none
    min_word_len = 2
    charset_type = sbcs
    min_prefix_len = 3
    enable_star = 1
}

index user_base : _user
{
    source = user_base
    path = /opt/sphinx/var/data/user_base
}

index user_incr : _user
{
    source = user_incr
    path = /opt/sphinx/var/data/user_incr
}

index user
{
    type = distributed
    local = user_base
    local = user_incr
}

searchd
{
    listen = 3312
    log = /opt/sphinx/var/log/searchd/searchd.log
    query_log = /opt/sphinx/var/log/searchd/query.log
    pid_file = /opt/sphinx/var/log/searchd/searchd.pid
}
Run Code Online (Sandbox Code Playgroud)