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