4

我是狮身人面像的新手,我正在一个新网站上设置它。它工作正常,当我在控制台中使用搜索进行搜索时,一切正常。

使用 PHP api 和搜索,也给了我相同的结果。但它只给了我找到的行的 ID 和权重。例如,是否有某种方法可以将一些文本字段与“匹配”哈希结合起来?

如果没有办法做到这一点,是否有人知道如何以狮​​身人面像权重排序顺序从数据库(sql)中检索记录(同时搜索所有记录)?

4

4 回答 4

4

是的,狮身人面像不会带来结果。但我发现了一种使用 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 的答案,但只有一个循环。我猜可以在大的结果中产生一些差异。

于 2009-03-06T11:19:05.957 回答
1

您可以在 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)
于 2009-03-19T13:56:48.220 回答
0

不幸的是,sphinx 没有返回匹配的字段,只返回它的 id(sphinx 索引不包含数据 - 仅来自数据的哈希)。您可以在 sphinxsearch.com 论坛上发布有关此问题的信息。

于 2009-03-05T16:52:51.730 回答
0

正如 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;
于 2009-03-05T23:51:49.413 回答