我是狮身人面像的新手,我正在一个新网站上设置它。它工作正常,当我在控制台中使用搜索进行搜索时,一切正常。
使用 PHP api 和搜索,也给了我相同的结果。但它只给了我找到的行的 ID 和权重。例如,是否有某种方法可以将一些文本字段与“匹配”哈希结合起来?
如果没有办法做到这一点,是否有人知道如何以狮身人面像权重排序顺序从数据库(sql)中检索记录(同时搜索所有记录)?
我是狮身人面像的新手,我正在一个新网站上设置它。它工作正常,当我在控制台中使用搜索进行搜索时,一切正常。
使用 PHP api 和搜索,也给了我相同的结果。但它只给了我找到的行的 ID 和权重。例如,是否有某种方法可以将一些文本字段与“匹配”哈希结合起来?
如果没有办法做到这一点,是否有人知道如何以狮身人面像权重排序顺序从数据库(sql)中检索记录(同时搜索所有记录)?
是的,狮身人面像不会带来结果。但我发现了一种使用 IN() 子句重新排序查询的简单方法,将所有内容组合在一起。
查询某事
SELECT * FROM table WHERE id IN(id_list... )
只是索引结果,它们的 id 在表中:
while ($row = mysql_fetch_objects)
$result[$row->id] = $row;
并从 sphinx 获得匹配结果,它很容易重新排序:
$ordered_result = array();
foreach ($sphinxs_results['matches'] as $id => $content)
$ordered_result[] = $result1[$id];
如果您的 $sphinxs_results 顺序正确,这将起作用。
它几乎是 pat 的答案,但只有一个循环。我猜可以在大的结果中产生一些差异。
您可以在 ORDER BY 中使用 mysql FIELD() 函数调用来确保所有内容都符合 sphinx 指定的顺序。
$idlist = array();
foreach ( $sphinx_result["matches"] as $id => $idinfo ) {
$idlist[] = "$id";
}
$ids = implode(", ", $idlist);
SELECT * FROM table WHERE id IN ($ids) ORDER BY FIELD(id, $ids)
不幸的是,sphinx 没有返回匹配的字段,只返回它的 id(sphinx 索引不包含数据 - 仅来自数据的哈希)。您可以在 sphinxsearch.com 论坛上发布有关此问题的信息。
正如 Alex 所说,Sphinx 不会返回该信息。您必须使用 ID 自己查询数据库 - 只需遍历每个 ID,获取相关数据,保持结果按权重顺序排列。要在一个查询中完成所有操作,您可以尝试以下操作(伪代码 - PHP 不是我选择的语言):
results = db.query("SELECT * FROM table WHERE id IN (%s)", matches.join(", "));
ordered_results = [];
for (match in matches) {
for (result in results) {
if (result["id"] == match) {
ordered_results << result;
}
}
}
return ordered_results;