Solr的正在使用通过用户生成列表的数据库中进行搜索。 这些列表是通过DataImportHandler导入的Solr从MySQL。
问题:很多时候,用户报告相同的上市到数据库中,有时需要有少许改变其上市后,以避免为重复后很容易被检测到。
我应该如何实现近重复检测使用Solr? 我不介意在Solr的指数具有接近重复的房源,只要在搜索结果不包含这些近乎重复的商家信息。
我想有4个可能的地方做这个近乎重复检测
- 当用户提交上市(PHP正在这里使用)
- 在从MySQL数据导入到Solr
- 从MySQL数据导入后
- 当搜索正在做
什么是做到这一点的推荐的方法? 谢谢!
我不熟悉Solr的,我会当用户提交上市实行“近重复”。 有跳槽不同的算法来检测近重复类似的捷卡索引 。
我做了一个小脚本看到的相似系数之间的差别:
<?php
$input1 = "Hello there, this is a test 1, you see it's almost the same";
$input2 = "Hello there, this is a test 2, you saw it, it's almost the same";
$input3 = "this is very different from the others, but who knows ?";
echo jackard($input1, $input1) . "<br />"; // results 1
echo jackard($input1, $input2) . "<br />"; // results 0.81481481481481
echo jackard($input1, $input3) . "<br />"; // results 0.25
echo jackard($input2, $input3); // results 0.24
function jackard($a, $b){
$a_arr = explode(" ", $a);
$b_arr = explode(" ", $b);
$intersect_a_b = array_intersect($a_arr,$b_arr);
return((count($intersect_a_b)/(count($a_arr)+count($b_arr)))*2);
}
?>
您可能会看到,如果结果是1,这意味着它是相同的句子或它使用同样的话在不同的顺序。 然而,该值越小,越独特的“一句话”是。 这是相当简单的实现。 你可以设置例如0.4的限值。 而如果通过此限制设定在队列中“请求”。 再取在上市一看manualy。 这不是“高效”。 但我给你的想法,它是由你来制定一个更为复杂和自动化系统/算法。 也许你也应该看看这里 。