我有一个使用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搜索结果的重复次数?
答案 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排序。甚至转移到上次活动后的几个月,它曾经给出了不想要的结果。
因此,改组配置文件的数量显着增加
如果有人遇到类似我们所受影响的挑战,我希望这种经历可以代表任何用途。