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

使用PHP api和搜索,也给我相同的结果。但是它只为我找到的行提供了ID和权重。有没有办法让一些文本字段与'匹配'哈希一起使用,例如?

如果没有办法做到这一点,是否有人对如何以sphinx权重排序顺序从数据库(sql)中检索记录(同时搜索所有这些记录)有很好的想法?

有帮助吗?

解决方案

您可以在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)

其他提示

是的,狮身人面像没有带来结果。 但我发现了一种使用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的顺序正确,这将有效。

它的答案差不多,但循环次数减少了。我想,可以在大结果上产生一些差异。

不幸的是,sphinx没有返回匹配的字段,只返回其ID(sphinx索引不包含数据 - 仅来自数据的散列)。 有关此问题的帖子,您可以在sphinxsearch.com论坛上找到。

正如亚历克斯所说,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;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top