2015-09-22 3 views
0

В настоящее время Rethink API documentation говорит, что команда get_nearest работает только с таблицей. Конечно, я могу потом фильтровать результаты, но это кажется неэффективным, а также требует, чтобы все элементы отсортировались по расстоянию, когда я хочу ограничить результат определенным количеством элементов.Есть ли способ запросить ближайшие местоположения на фильтре в RethinkDB?

Есть ли способ, с помощью которого я могу получить самые близкие результаты из отфильтрованного списка в одном запросе?

ответ

1

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

Однако, если у вас есть отфильтрованный список, самое лучшее, что вы можете сделать, это использовать distance и заказать его результат.

Что-то, как это будет работать:

r.db('db').table('table') 
    .filter(function_to_filter) 
    .orderBy(function(doc) { 
    return r.distance('your_point_to_compare', doc('point')) 
    }) 
+0

Круто, хорошо выглядит. Я попробую его и пометьте как ответ, когда это сработает. Вы ожидаете, что это будет лучше или хуже, чем первый заказ по расстоянию, а затем фильтрация? – Fritzz

+0

Это зависит от вашей функции фильтра и размера данных, поэтому трудно сказать, какой из них лучше. Но, как правило, сначала фильтруйте, а затем orderBy лучше. Если вы хотите получить лучшую производительность, попробуйте включить функцию фильтра в индекс, если это возможно, и используйте 'getAll' в этом индексе. Если вы можете опубликовать содержимое функции фильтра, я постараюсь превратить его в индекс, если это возможно для использования с 'getAll' – kureikain

 Смежные вопросы

  • Нет связанных вопросов^_^