Solr используется для поиска в базе данных, созданных пользователями. Эти списки импортируются в Solr из MySQL через DataImportHandler.
Проблема. Довольно часто пользователи сообщают о том же листинге в базу данных, иногда с незначительными изменениями в своем листинговом сообщении, чтобы избежать простого обнаружения в виде дубликата сообщения.
Как я должен реализовать обнаружение почти дублирования с помощью Solr? Я не возражаю, если в индексе Solr будут отображаться почти дубликаты, если результаты поиска не содержат этих почти дублированных списков.
Я предполагаю, что есть 4 возможных места, чтобы сделать это почти двойное обнаружение
Каков рекомендуемый способ сделать это? Спасибо!
я не знаком с Solr, я бы использовал «почти дублирование», когда пользователь отправляет листинг. Существуют различные алгоритмы для обнаружения почти дубликатов, таких как индексирование Jaccard .
Я сделал небольшой скрипт, чтобы увидеть разницу между коэффициентами подобия:
<?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. И установите «запрос» в очереди, если он пройдет этот предел. А затем взгляните на список вручную. Это не «эффективно». Но я дал вам эту идею, и вам решать разработать более сложную и автоматизированную систему / алгоритм. И, возможно, вам стоит взглянуть сюда .