狮身人面像& PHP:如何最小化重复

时间:2015-03-25 18:58:42

标签: php random sphinx

我有一个使用sphinx版本0.9.9版本(r2117)的服务(我知道......我知道......它超级老了,但更新sphinx根本不是一个选项。)

狮身人面像设置:

限制1000000

偏移0

索引主要+ delta

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

我目前的排序表达式非常复杂:

$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搜索并收集所有这些调用的结果。问题是,在一百个可用的配置文件中,结果集总是重复(几个sphinx调用的结果)。

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

1 个答案:

答案 0 :(得分:0)

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

自从我发布这个问题以来已经有一段时间了,狮身人面像随机化问题的任务正在与其他职责并行进行。基本上,解决方案是多个操作的组合。以下是最终实际帮助的内容:

  • 我们决定摆脱sphinx随机化,所以这部分代码永远被删除了:

    //随机。 $ randomMod = floor(mt_rand(0,385)); $ sortExpression。=&#34; +((idprofile - (FLOOR(idprofile /&#34;。$ randomMod。&#34;)*&#34;。$ randomMod。&#34;))* 0.01)&#34 ;;

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

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

  • 根据日期时间字段删除任何sphinx排序。甚至转移到上次活动后的几个月,它曾经给出了不想要的结果。

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

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

如果有人遇到类似我们所受影响的挑战,我希望这种经历可以代表任何用途。