【问题标题】:Sphinx search returns different results using command line than php apiSphinx 搜索使用命令行返回的结果与 php api 不同
【发布时间】:2013-10-30 05:24:16
【问题描述】:

命令行搜索(26019 个文档/26019 个命中)

search.exe --config c:\sphinx\sphinx.conf keyword

search.exe --config c:\sphinx\sphinx.conf keyword -e2

PHP API(总数:1000 / 找到的总数:51038)

//sphinx command line and php api

mysql_connect("localhost", "username", "password");
mysql_select_db("database");

require_once('sphinxapi.php');

$cl = new SphinxClient;
$cl->setServer("127.0.0.1", 9312); // NOT "localhost" under Windows 7!
$cl->setMatchMode(SPH_MATCH_EXTENDED2);
$cl->SetLimits(0, 20);

$result = $cl->Query("keyword");

if ($result['total'] > 0)
{
    echo 'Total: ' . $result['total'] . "<br />\n";
    echo 'Total Found: ' . $result['total_found'] . "<br />\n";
    echo '<table>';
    echo '<tr><td>ID</td><td>Date</td><td>Title</td><td>Content</td></tr>';

    foreach ($result['matches'] as $id => $otherStuff)
    {
        $row = mysql_fetch_array(mysql_query("select * from table where id = $id"));
        extract($row);

        echo "<tr><td>$id</td><td>$date</td><td>$title</td><td>$content</td></tr>";
    }
    echo '</table>';
}
else
{
    echo 'No results found';
}

比赛模式:

SPH_MATCH_ALL / SPH_MATCH_ANY / SPH_MATCH_PHRASE / SPH_MATCH_BOOLEAN / SPH_MATCH_EXTENDED / SPH_MATCH_EXTENDED2

PS:命令行结果是正确的,因为我直接从 MySQL 中进行了选择,我也得到了。

$sql = "SELECT t1.field1, t1.field2, t1.field3, t2.field4
    FROM t_table1 AS t1
    LEFT JOIN t_table2 AS t2 ON t2.id = t1.t2_id WHERE t2.field4 LIKE 'keyword'";

【问题讨论】:

    标签: php mysql search search-engine sphinx


    【解决方案1】:

    忘记你找到了“search.exe”。忽略它。真的。忘掉它。现在。我会等。

    现在结束,尝试具体说明您要搜索的索引(在 Query 函数调用上)

    还为您获得的每一行运行一次查询,这并不好。您应该只针对所有结果发出一个 SQL 查询。 mysql IN() 函数使它变得容易。

    例如http://www.nearby.org.uk/sphinx/search-example5-withcomments.phps

    更基本但仍然有效的示例http://www.nearby.org.uk/sphinx/search-example2.phps

    【讨论】:

      【解决方案2】:

      Sphinx 仅限于返回 1000 个结果。

      有一些提高该限制的建议,因此请查看他们的页面。请注意,您可以在旧版 sphinx 版本中将该数字更改为您想要的任何值,但它会返回 1000 作为最大值。

      【讨论】:

        【解决方案3】:

        在这里回答:

        http://sphinxsearch.com/docs/manual-2.0.5.html#conf-max-matches

        除非您打算在同一页面上使用 26019 匹配项,否则我建议您使用分页(如果您只显示结果)

        【讨论】:

        • 我的查询是关于命令行和 api (26019 / 51038) 之间的结果差异。 26019 是正确的结果。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-08
        • 2012-04-18
        • 1970-01-01
        相关资源
        最近更新 更多