Почти двойное обнаружение в Solr

Solr используется для поиска в базе данных, созданных пользователями. Эти списки импортируются в Solr из MySQL через DataImportHandler.

Проблема. Довольно часто пользователи сообщают о том же листинге в базу данных, иногда с незначительными изменениями в своем листинговом сообщении, чтобы избежать простого обнаружения в виде дубликата сообщения.

Как я должен реализовать обнаружение почти дублирования с помощью Solr? Я не возражаю, если в индексе Solr будут отображаться почти дубликаты, если результаты поиска не содержат этих почти дублированных списков.

Я предполагаю, что есть 4 возможных места, чтобы сделать это почти двойное обнаружение

  1. Когда пользователь отправляет листинг (здесь используется PHP)
  2. Во время импорта данных из MySQL в Solr
  3. После импорта данных из MySQL
  4. Когда выполняется поиск

Каков рекомендуемый способ сделать это? Спасибо!

Solutions Collecting From Web of "Почти двойное обнаружение в Solr"

я не знаком с 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. И установите «запрос» в очереди, если он пройдет этот предел. А затем взгляните на список вручную. Это не «эффективно». Но я дал вам эту идею, и вам решать разработать более сложную и автоматизированную систему / алгоритм. И, возможно, вам стоит взглянуть сюда .