我一直试图让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个索引?
答案 0 :(得分:2)
我很确定它已经搜索了两个索引。只是那个
1)文档ID必须是唯一的。因此,如果第二个索引中的文档首先具有相同的id,则只有第二个中的文档将显示在结果中。为了解决这个问题,你需要安排ids是独一无二的。
2)它不会尝试合并字段列表(也不是那个属性) - 它只是使用最后一个。搜索多个索引的常规方法是使用相同的字段名(例如,在主+ delta中),因此它并不重要。
-
也是你的
sql_attr_uint = id
是错误的。它不应该在那里。文档ID是自动的 - 它始终是mysql结果集中的第一列。 Sphinx shuold足够聪明,可以完全忽略它,但最好将其移除以避免混淆。