近重复检测的Solr(Near duplicate detection in Solr)

2019-08-01 05:34发布

Solr的正在使用通过用户生成列表的数据库中进行搜索。 这些列表是通过DataImportHandler导入的Solr从MySQL。

问题:很多时候,用户报告相同的上市到数据库中,有时需要有少许改变其上市后,以避免为重复后很容易被检测到。

我应该如何实现近重复检测使用Solr? 我不介意在Solr的指数具有接近重复的房源,只要在搜索结果不包含这些近乎重复的商家信息。

我想有4个可能的地方做这个近乎重复检测

  1. 当用户提交上市(PHP正在这里使用)
  2. 在从MySQL数据导入到Solr
  3. 从MySQL数据导入后
  4. 当搜索正在做

什么是做到这一点的推荐的方法? 谢谢!

Answer 1:

我不熟悉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。 这不是“高效”。 但我给你的想法,它是由你来制定一个更为复杂和自动化系统/算法。 也许你也应该看看这里 。



文章来源: Near duplicate detection in Solr