Это проблема в Data mining
и similarity search
.Есть множество статей, описывающих, как это можно сделать, и масштабирование до огромных объемов данных.
У меня есть реализация ( github: mksteve, кластеризация , с некоторыми комментариями об этом в моем блог ) из Википедия: Метрическое дерево .Для этого необходимо, чтобы принимаемые вами меры соответствовали неравенству треугольника ( wikipedia: Метрическое пространство . То есть метрическое расстояние от элемента A до элемента C меньше или равно расстоянию от A до B + расстояниеОт B до C.
Принимая во внимание это неравенство, можно обрезать пространство поиска, поэтому поиск выполняется только по поддеревьям, которые могут перекрываться с целевой областью. Без учета этой функции (метрическое пространство).
Возможно, число разниц в simhash будет метрическим пространством.
Общее использование этих наборов данных упоминается в документе, когда упоминается mapReduce, который обычно запускаетсяна hadoop cluster
. Каждый узел обработки получает подмножество данных и находит набор целевых совпадений из своих локальных наборов данных. Затем они объединяются, чтобы получить полностью упорядоченный список похожих элементов.
Есть некоторые документы (неуверенные в ссылках), которые ссылаются на использование m-деревьев в кластере, где различные части поискапространство предоставляется разным кластерам, но я не уверен, будет ли инфраструктура hadoop поддерживать использование такого высокого уровня абстракции.