使用Sphinx查询2个不同表的2个索引

时间:2012-09-01 15:26:28

标签: sphinx

我一直试图让sphinx通过链接2个索引来搜索2个表。以下是这些索引的来源:

source gSrc 
{ #General Source
type                    = mysql

sql_host        = localhost
sql_user        = (blahblahblah)
sql_pass        = (blahblahblah)
sql_db          = (blahblahblah)
sql_port        = 3306  # optional, default is 3306

sql_ranged_throttle = 0
}

source mentionActivitySrc : gSrc
{
sql_query       = \
    SELECT id, author, thesis, body, created, updated \
    FROM activity

sql_attr_uint       = id
sql_attr_timestamp  = updated

sql_query_info      = SELECT * FROM activity WHERE id=$id
}

source mentionUserSrc : gSrc
{
sql_query       = \
    SELECT id, first, last, username, email, updated \
    FROM user

sql_attr_uint       = id
sql_attr_timestamp  = updated

sql_query_info      = SELECT * FROM user WHERE id=$id
}

以下是索引本身:

index gIndex
{ #General Index
docinfo         = extern
mlock           = 0
morphology      = none
min_word_len        = 1
charset_type        = sbcs
html_strip      = 0
}

index activityMentionIndex : gIndex 
{
source          = mentionActivitySrc
path            = /var/lib/sphinxsearch/data/activityMentionIndex
}

index userMentionIndex : gIndex 
{
source          = mentionUserSrc
path            = /var/lib/sphinxsearch/data/userMentionIndex
}

我正在使用sphinxapi.php,当我这样做时

->query('some keywords', 'activityMentionIndex userMentionIndex');

返回数组的字段索引显示它只识别了第二个索引(在本例中为userMentionIndex,如果我切换它们,它将识别activityMentionIndex)

有人可以告诉我我可能做错了什么,或者是否可以查询2个不同表的2个索引?

1 个答案:

答案 0 :(得分:2)

我很确定它已经搜索了两个索引。只是那个

1)文档ID必须是唯一的。因此,如果第二个索引中的文档首先具有相同的id,则只有第二个中的文档将显示在结果中。为了解决这个问题,你需要安排ids是独一无二的。

2)它不会尝试合并字段列表(也不是那个属性) - 它只是使用最后一个。搜索多个索引的常规方法是使用相同的字段名(例如,在主+ delta中),因此它并不重要。

-

也是你的

 sql_attr_uint       = id

是错误的。它不应该在那里。文档ID是自动的 - 它始终是mysql结果集中的第一列。 Sphinx shuold足够聪明,可以完全忽略它,但最好将其移除以避免混淆。