lucene.net пейджинг с помощью запроса? - PullRequest
1 голос
/ 27 ноября 2011

Я использую 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

1 Ответ

1 голос
/ 27 ноября 2011

Я не думаю, что есть major waste of resources, так как поиск (делает его простым) не более, чем вычисление Битвектора и баллов. Что дорого стоит, так это чтение документов из индекса. (За исключением устаревшего класса Hits) результаты поиска не читают документы, а просто возвращают документы, поэтому при пропуске первого результата N не так много.

Исключением является случай, когда вы хотите отсортировать результат по некоторому полю. Затем все документы в списке результатов поиска должны быть прочитаны из индекса, чтобы иметь возможность возвращать их в правильном порядке.

...