【问题标题】:Sphinx & PHP : How to minimize repetitionSphinx & PHP:如何减少重复
【发布时间】:2015-03-25 18:58:42
【问题描述】:

我有一个使用 sphinx 版本 0.9.9-release (r2117) 的服务(我知道..我知道..它超级旧,但更新 sphinx 根本不是一种选择)。

狮身人面像设置:

限制 1000000

偏移量 0

索引主+增量

基本上它是一个配置文件表。首先,我必须按性别和年龄对个人资料进行排序。比我需要添加一些随机化来从这些排序中获取各种配置文件。

我目前的排序表达式相当复杂:

$sortExpression .= " + (" . bindec('10000000000000000') . " * (gender <> 0))";
$sortExpression .= " + ((age > 0) * (" . bindec('111111100000000') . " - ABS(age - " . $this->mProfileInfo['age'] . ")))";
...
// Random.
$randomMod = floor(mt_rand(0, 385));
$sortExpression .= " + ((idprofile - (FLOOR(idprofile / " . $randomMod . ") * " . $randomMod . ")) * 0.01)";

我还需要多次调用 sphinx search 并收集所有这些调用的结果。问题在于,在一百个可用配置文件中,结果集中总是存在重复(几个 sphinx 调用的结果)。

如何减少排序数据的 sphinx 搜索结果中的重复?

【问题讨论】:

  • “(几次狮身人面像调用的结果)”到底是什么意思?为什么要打多次?你想做什么?
  • @barryhunter,感谢您的帮助!我已经失去了希望有人能回答我的问题。解释细节并不容易,而且我一般是狮身人面像的菜鸟。逻辑是按年龄和性别查找个人资料的匹配项。有一个年龄范围。关键是对于多个配置文件,选择了相同的匹配配置文件 - 无论我在同一年龄范围内有数百个配置文件。我需要在那里添加一些随机化。
  • 您的意思是您看到某些配置文件“出现”在随机结果中,比其他配置文件更频繁?是不是因为您使用了错误的“随机排序”方法。您当前的系统非常有偏见,带有素数 id 的文档将显示与容易整除的数字非常不同(我不知道是少还是多,因为它取决于表达式的其余部分和排序顺序)。你需要一个更好的随机系统。很难在不了解的情况下推荐一个

标签: php random sphinx


【解决方案1】:

注意:遗留代码问题!更新 sphinx 版本不是一个选项。

自从我发布这个问题以来已经有一段时间了,sphinx 随机化问题的任务与其他任务同时进行。基本上,解决方案是几个动作的组合。以下是最终的实际帮助:

  • 我们决定摆脱 sphinx 随机化,因此这部分代码被永久删除:

    // 随机的。 $randomMod = floor(mt_rand(0, 385)); $sortExpression .= " + ((idprofile - (FLOOR(idprofile / " . $randomMod . ") * " . $randomMod . ")) * 0.01)";

    因此,狮身人面像的结果变得更加可预测。

  • 添加了 php 随机化,而不是 sphinx 随机化。因此,我们在提取少数几个之前对所有相等的配置文件进行了洗牌(确保相等配置文件的数量是合理的)

  • 删除了基于日期时间字段的任何狮身人面像排序。甚至转移到自上次活动以来的几个月,它曾经会产生不想要的结果。

    因此,改组配置文件的数量显着增加

  • 从 sphinx 中删除了不必要的字段

如果有人遇到过与我们所影响的类似的挑战,我希望这次经历对任何人都有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-20
    • 1970-01-01
    相关资源
    最近更新 更多