Найти запись со значениями, ближайшими к тем, которые у меня есть - PullRequest
0 голосов
/ 06 октября 2011

У меня есть поля A, B, C, D и мне нужны записи с A,B,C,D шкафом для этого вектора MY = (2, 3, 4, 5).

MY различен для каждого запроса.

Единственное, что приходит на умсортирует каждый раз по abs(A - MY.A) + abs(B - MY.B) + ... как-то.Но это должно работать очень медленно, я полагаю.

Теперь я думаю об использовании MongoDB.Если вы скажете, что MongoDB - не лучший инструмент для этого - я буду рад выслушать любые предложения.

GeoLocation - для этого требуется всего 2 координаты.МОЙ это просто вектор чисел.Это не пространственное.ABCD между 1 и 10. Я имею в виду, что мне нужно найти вектор ДРУГОЙ, чтобы минимизировать K = | MY-OTHER |.

Заранее спасибо.

Свежая идея

Запрос всех записей, где A находится в [A - s, A + s], B в [B - s, B + s] .. и затем сортировка их с использованием некоторой логики.s - константа, основанная на количестве записей, выбранных, чтобы запрос возвращал до 10-20 записей.

1 Ответ

0 голосов
/ 06 октября 2011

Не ясно, являются ли ваши векторы фактическими пространственными координатами или просто векторами данных.

Если они являются действительными числами, вы можете использовать что-то вроде косинусного сходства, чтобы вычислить сходство между двумя векторами.http://en.wikipedia.org/wiki/Cosine_similarity

Если они являются пространственными координатами, вы можете использовать пространственный индекс, как и другой предложенный плакат.Я добился большого успеха с пространственным индексом R-Tree, который реализован на многих языках и позволит вам выполнять все виды пространственных запросов.

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