将Sphinx原始索引转换为实时索引后出错

将Sphinx原始索引转换为实时索引后出错,sphinx,Sphinx,我使用本教程将原始sphinx索引转换为实时索引: 我更改了sphinx.conf: source movies_dev { type = mysql sql_host = localhost sql_user = ******** sql_pass = ********

我使用本教程将原始sphinx索引转换为实时索引:

我更改了sphinx.conf:

source movies_dev
{
    type                            = mysql

    sql_host                        = localhost
    sql_user                        = ********
    sql_pass                        = ********
    sql_db                          = ********
    sql_sock                        = /var/run/mysqld/mysqld.sock
    sql_port                        = 3306

    sql_query                       = \
            SELECT \
                    CRC32(movie_id) AS id, movie_id, format_id, active, year, title \
            FROM \
                    movie;
    sql_attr_uint                   = format_id
    sql_attr_uint                   = active
    sql_attr_uint                   = year
    sql_field_string                   = movie_id
    sql_field_string                   = title

    sql_query_info          = SELECT * FROM movie WHERE CRC32(movie_id)=$id
    sql_query_pre = SET NAMES utf8
}

index movies_dev
{
    source                  = movies_dev
    path                    = /var/data/sphinx/movies_dev
    morphology              = stem_en
    enable_star = 1
    min_word_len            = 3
    min_prefix_len          = 0
    min_infix_len           = 3
    charset_type = utf-8
    charset_table   = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F, U+DC->U+FC, U+C4->U+E4, U+D6->U+F6, U+DF, U+E4, U+F6, U+FC
}

index rt_movies_dev
{
    type                    = rt
    rt_mem_limit            = 32M

    path                    = /var/data/sphinx/rt_movies_dev
    charset_type            = utf-8

    rt_field                   = movie_id
    rt_field                   = title
    rt_attr_uint                   = format_id
    rt_attr_uint                   = year
    rt_attr_uint                   = active
}

source attach_movies_dev
{
    type                    = mysql

    sql_host                = localhost
    sql_user                = ********
    sql_pass                = ********
    sql_db                  = ********

    sql_query               = SELECT 1 FROM rt_movies_dev
    sql_query_post          = ATTACH INDEX movies_dev TO RTINDEX rt_movies_dev
}

index attach_movies_dev
{
    source                  = attach_movies_dev
    path                    = /var/data/sphinx/attach_movies_dev
    docinfo                 = extern
    charset_type            = utf-8
}
我创建了“rt_movies_dev”表:

之后,我运行以下三个命令:

root@server:~# /usr/local/sphinx/bin/searchd --config /usr/local/sphinx/etc/sphinx.conf;
root@server:~# /usr/local/sphinx/bin/indexer --config /usr/local/sphinx/etc/sphinx.conf movies_dev --rotate;
root@server:~# /usr/local/sphinx/bin/indexer --config /usr/local/sphinx/etc/sphinx.conf attach_movies_dev;
前两个命令之后没有错误(教程中类似的警告除外)。 但最后一个命令抛出了以下命令:

ERROR: index 'attach_movies_dev': No fields in schema - will not index.

我不知道错误到底是怎么说的,我找不到任何有用的东西。你能说什么不对吗?我被困在这里。

首先连接电影开发源代码,连接到SPHINX,而不是mysql。所以不需要mysql表

您只是使用索引器来调用SphinxQL命令

但是从我看到的情况来看,尝试为附加索引编制索引总是会导致错误,因为RT索引本身必须为空(因此可以将磁盘索引附加到它!)

因此,将附加索引改为连接到searchd。而且它应该工作得更好。可能是一个空的RT索引,是可以的,indexer将只创建一个空索引,但重要的是它仍将运行_post命令。这就是索引存在的全部原因


还要注意,磁盘索引和RT索引有不同的字段,在磁盘索引中,有两个sql_field_string,它们创建属性和字段。因此,RT索引应该包含两个要匹配的字符串属性(而不仅仅是字段)

首先,谢谢你的回答!但是你能告诉我如何创建一个“空RT索引”吗?这是否意味着我必须删除配置文件中的“rt_字段”和“rt_属性单位”?您还写了“所以将您的附加索引改为连接到searchd。”。我如何实现这一点?对不起,我对斯芬克斯一无所知。
ERROR: index 'attach_movies_dev': No fields in schema - will not index.