1

我在使用 Sphinx 搜索索引时遇到问题。我不断从中得到空的结果集。

source mrc
{
    type     = mysql
    sql_host = localhost
    sql_user = root
    sql_pass = 
    sql_db   = test_db
    sql_port = 3306
    mysql_connect_flags = 32

    sql_query_pre = SET NAMES latin1
    sql_query_pre = SET SESSION query_cache_type=OFF
    sql_query_pre = REPLACE INTO sphinx.indexer (idx,server,version,lastrun_at) SELECT 'mrc','localhost','2.0.4',UNIX_TIMESTAMP(NOW()) FROM DUAL
    sql_query_post = UPDATE sphinx.indexer SET fetched_by = UNIX_TIMESTAMP(NOW()) WHERE idx = 'mrc' AND server = 'localhost' AND version = '2.0.4'
    sql_query_post_index = UPDATE sphinx.indexer SET indexed_by = UNIX_TIMESTAMP(NOW()) WHERE idx = 'mrc' AND server = 'localhost' AND version = '2.0.4'

    sql_attr_uint = mrc_id
    sql_attr_uint = mrc_parent
    sql_attr_float = mrc_latitude   
    sql_attr_float = mrc_longitude  

    sql_query = \
        SELECT mrc_id AS doc_id, \
        mrc_id, \
        mrc_parent, \
        RADIANS(mrc_latitude) as mrc_latitude, \
        RADIANS(mrc_longitude) as mrc_longitude \
        FROM mrc_table \
        WHERE mrc_parent > 0

    sql_query_info = SELECT * FROM mrc_table WHERE mrc_id = $id

}

index mrc
{
    charset_type = sbcs
    docinfo = extern
    mlock = 1
    morphology = none
    source = mrc
    path = /usr/local/var/data/mrc
}

索引器给了我-

indexing index 'member_region_cities'...
collected 78312 docs, 0.0 MB
total 78312 docs, 0 bytes
total 0.656 sec, 0 bytes/sec, 119354.57 docs/sec

如果我通过 mysql 连接到 searchd 并执行

SELECT * FROM mrc_table;

它返回空。

本地主机表中肯定有数据,您可以在索引器显示“已收集 78312”的位置看到它

那么为什么 Sphinx 不将数据放入 searchd 中呢?

干杯

4

2 回答 2

2

我发现了我的问题,我没有选择任何字段。我将所有列都配置为属性。

我通过删除这一行来解决这个问题 - sql_attr_uint = mrc_id

为了将来参考,如果您需要一个没有字段的索引,您可以设置一个虚拟字段,例如添加 - 'a' as dummy - 到选择查询。

于 2012-07-16T10:34:58.087 回答
2

请仔细检查您的问题。您为名为mrc的索引提供了配置,但索引器输出读取member_region_cities但我相信它只是名称的缩写。

  1. 如果 searchd 已启动并正在运行,请确保使用--rotate选项运行索引器。

  2. 您可以使用索引检查文档编号

    ./indextool --dumpheader /usr/local/var/data/mrc.sph | grep 总文件

  3. 请确保您连接到 Sphinx 服务器,而不是 MySQL,通常它在端口 9306 上运行

    mysql -h 127.0.0.1 -P 9306

希望这可以帮助

于 2012-07-09T18:41:33.633 回答