Не знаю, как это сделать непосредственно с MongoDB, но если у вас есть тип данных «biginteger», то уменьшите интересы до битового поля. Затем вы не можете удалить проценты (без повторного вычисления битового поля для всех), но вы можете добавить проценты, так как их выделение просто добавит больше битов в biginteger. Тогда для сравнения interestes лиц A и B, то есть операции, в C/C++ как синтаксис:
common=bitCount(A&B)
сколько общие интересы А и В имеют
onlyA=bitCount(A^(A&B))
сколько интересы А имеет, что B не есть
onlyB=bitCount(B^(A&B))
, как много интересов в имеет, что а не имеет
different=bitCount(A^B)
, сколько различные интересы а и в есть общее (такой же, как onlyA + onlyB)
total=bitCount(A|B)
сколько различных интересов А.Н. d B имеют общее количество (то же, что и общее + другое)
Из этих цифр вы можете оценить, насколько тесно соответствуют интересы, точную формулу в зависимости от того, как вы хотите подчеркнуть одинаковые интересы против разных интересов и какого масштаба вы хотите иметь.
По меньшей мере, у класса BigInteger Java есть метод подсчета бит из коробки, в противном случае это можно сделать с помощью петли грубой силы, используя & 1 и >> 1 операцию. Не знаю, поддерживает ли MongoDB такие конструкции или имеет оператор/функцию для подсчета бит больших данных int или даже если MongoDB имеет большой тип данных int ...
У вас нет. Для этого нет «простого» запроса MongoDB и не существует схемы, которая позволяет преобразовать эту проблему в простой запрос.Это в основном n-векторное сравнение, которое вы ищете, поэтому вам нужно будет создать/найти поисковую систему, которая это сделает. –
Вы можете указать, что у вас есть чувствительное к местонахождению хэширование в качестве подписи для интересов пользователя, а также для подписи на этих подписях. Если вы хотите найти похожих пользователей для определенного пользователя 'A', вы получите всех пользователей в каждом ведре, к которому принадлежит' A'. Я могу написать некоторые подробности позже. Но, короче говоря, вам нужно настроить чувствительность к местоположению, чтобы избежать n-векторного сравнения во время запроса. – greeness