【问题标题】:Sphinx search engine, a couple of quick questions狮身人面像搜索引擎,几个快速问题
【发布时间】:2009-09-15 07:49:22
【问题描述】:

所以,我刚刚开始阅读此内容,我以前从未在 PHP 中实现过搜索。我有几个问题想知道:

  • 根据事物的声音,斯芬克斯需要 一个“守护进程”,一个运行在 背景,操作?
  • 假设我建立了一个 mySQL 的索引 表,然后用户上传另一个 记录。为了显示搜索 这张唱片,我要建立吗 索引一遍又一遍,每个 用户更新/创建 记录?

谢谢。

【问题讨论】:

    标签: search indexing sphinx


    【解决方案1】:

    基本上,您需要一个基本索引,然后是一个增量索引。增量更新基础中的任何内容。因此,您可能会在凌晨 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
    }
    

    【讨论】:

      【解决方案2】:

      回答您的第一个问题:是的,Sphinx 带有一个后台运行的守护程序,并在收到指示时执行搜索。

      【讨论】:

        【解决方案3】:

        您可以使用增量索引方案,请参阅here

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-29
          • 2015-04-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多