Найти наибольшее сходство между группой атрибутов (mongodb) - PullRequest
1 голос
/ 12 января 2011

У меня есть база данных в следующем синтаксисе:

{_id:'342', values:{ A: '432', B: 'asdf', C: '23', D: 'gg'}}
{_id:'343', values:{ A: 's', B: 'fsd', C: 'as', D: '4'}}
{_id:'344', values:{ A: 'f', B: 'f', C: 'af', D: '32'}}
{_id:'345', values:{ A: 'f', B: 'f', C: '333', D: 'adf'}}

Учитывая набор значений для A, B, C, D - я хочу найти документ, который имеет наибольшее сходство.

, например

Учитывая, {значения: {A: 'f', B: 'f', C: '333', D: '832'}} это будет соответствовать _id: 345, потому что у него есть совпадения A, B и C ,

Я хочу получить результаты, которые наиболее похожи на мои значения.

Есть ли запрос / алгоритм, который мог бы выполнить это быстро?

Примечание: не был уверен, как озаглавить это, если у вас есть лучшее название, не стесняйтесь редактировать его.

1 Ответ

0 голосов
/ 12 января 2011

Вот один из способов, которым вы могли бы сделать это, предполагая, что вы хотите, чтобы результаты в порядке близости соответствовали, и предполагая, что их всего 4 (так что можно выполнить все перестановки):

Используйте $ elemMatch (см.http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24elemMatch) несколько раз.

Первый запрос для всех 4 значений (1 запрос).
Если не удается выполнить запрос для каждой комбинации из 3 значений (4 запроса).
Если это не удается выполнить запросдля каждой комбинации из 2 значений (6 запросов).
Если это не удается выполнить запрос только для одного совпадения (4 запроса).

В качестве альтернативы можно использовать метод карты. В функции карты рассчитывается оценка дляв строке, если оценка> 0, введите идентификатор документа в качестве ключа и счет в качестве значения. В фазе сокращения проходите по одному результату без какой-либо обработки. Сортируйте результаты по счету.

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