Как я могу найти индекс элемента в базе данных, запрашивая только несколько одновременно? - PullRequest
1 голос
/ 21 июня 2019

У меня возникли проблемы с поиском хорошего и эффективного алгоритма для моего варианта использования.

По сути, я запускаю поиск в базе данных с помощью ElasticSearch через Rails, и мы настроили его так, чтобы он мог возвращать только 25 результатов за один раз (из приблизительного общего количества 5000), начиная с идентификатора, который Вы вводите (определяется параметром search_after). Я также ввожу идентификатор определенного результата поиска, индекс которого должен находиться внутри всей базы данных. Поиск не может определить, на какой странице (из 25 результатов) он находится. У нас также есть методы для нахождения результатов непосредственно до и после него (которые, вероятно, также можно изменить, чтобы получить результаты до 25 до и после), независимо от того, находится ли он на первой «странице» (то есть имеет индекс, скажем, 26) или нет.

Таким образом, это довольно легко для первых 25, поскольку вы можете просто выполнить search_after с самым первым элементом в общей базе данных, но после этого я не знаю, как действовать дальше.

Я думал о том, чтобы просто увеличить количество результатов до 26, затем использовать модульную арифметику, чтобы проверить, является ли это (n% 25 == 1) -ым результатом, а затем изменить search_after, чтобы он стал (n-1). ), но я понял, что это не сработает, если вы сразу нажмете на любой результат после того, как первый появится на странице. Я также подумал, что, возможно, я мог бы использовать вышеупомянутый метод, чтобы получить непосредственно предыдущий результат поиска и сделать search_after для этого, но затем я быстро понял, что он будет просто возвращать 1 каждый раз. Наконец, я подумал о том, чтобы просто увеличить search_after до тех пор, пока он не найдет идентификатор как последний результат 25, а затем использовать арифметику, чтобы выяснить, какой это индекс, но, очевидно, это невероятно вычислительно интенсивно.

Дайте мне знать, если понадобятся какие-либо разъяснения, потому что я знаю, что это своего рода странный вопрос. Спасибо.

...