Я использую lucene.net для создания индекса и его поиска. Я на самом деле использую API косвенно через проект Examine на codeplex. В настоящее время у меня все работает и логика подкачки на месте, однако текущая логика отображает результаты после поиск был завершен. Мне это не нравится, потому что это означает, что поиск, возможно, вернет тысячи записей, и только тогда мой код берет 10-20 записей, которые ему нужны, и отбрасывает остальное, что является большой тратой ресурсов. Даже если каждый элемент SearchResult занимает всего лишь 3 КБ, объем памяти для выполнения этих поисков со временем будет увеличиваться и станет огромным скачком памяти. Мой общий хост гарантирует только 1 ГБ выделенной памяти, так что это большая проблема для моего сайта.
Итак, вопрос: как я могу ограничить результаты результатов постраничным способом, используя только язык запросов lucene? Я посмотрел на проект apache lucene, с которого портирован lucene.net, и не вижу никакого синтаксиса, который позволил бы мне делать то, что я ищу. По сути, я хочу эквивалент того, что сервер sql должен ограничивать строки на уровне языка запросов.
например. (это то, как мы выполняем пейджинг в sql, и он возвращает только 20 записей, а не каждую запись, которая соответствует предложению where)
Выберите * из (выберите Row_Number () OVER (ORDER BY OrderDate) как RoNum,
Номер заказа,
Дата заказа
ОТ SalesOrders
ГДЕ OrderCustomerName вроде 'Davis%') O
ГДЕ RowNum МЕЖДУ 1 и 20