Как получить общее количество потенциальных результатов в Lucene

Я использую lucene на моем сайте, и я хочу показать общее количество результата от запроса, например:

Показ результатов x к y z

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

Или я делаю эту несправедливость, я должен быть передающим в, говорят 1000 и затем просто взятие 10 в диапазоне, что я требую?

16
задан Steen 18 April 2010 в 10:30
поделиться

2 ответа

Кстати, поскольку я знаю вас лично, я должен указать другим, я уже знал, что вы имеете в виду Lucene.net, а не Lucene :) хотя API будет таким же

В в версиях до 2.9.x можно было вызвать IndexSearcher.Search (запрос запроса, фильтр фильтра) , который вернул объект Hits , одно из свойств [методов, технически из-за Java порт] был Длина ()

Теперь это отметка ed Устарело, поскольку оно будет удалено в версии 3.0, единственные результаты поиска возвращают объекты TopDocs или TopFieldDocs .

Ваши альтернативы:

a) Используйте IndexServer.Search (запрос запроса, число целых чисел) , который вернет объект TopDocs , поэтому TopDocs.TotalHits покажет вам общее количество возможных совпадений, но за счет фактического создания результатов

б) Более быстрый способ - реализовать собственный объект Collector ( наследуется от Lucene.Net.Search.Collector ) и вызывает IndexSearcher.Search (запрос запроса, сборщик коллектора) . Метод поиска будет вызывать Collect (int docId) в вашем сборщике при каждом совпадении, поэтому, если вы внутренне отслеживаете это, у вас есть способ собрать все результаты.

Следует отметить, что Lucene не является средой запросов с полным набором результатов и предназначена для максимально быстрой потоковой передачи наиболее релевантных результатов вам (разработчику). Любой метод, который дает вам «общее количество результатов», является просто оболочкой, перечисляющей все совпадения (как и в случае с методом Collector).

Уловка состоит в том, чтобы сделать это перечисление как можно быстрее. Самая дорогая часть - десериализация документов из индекса, заполнение каждого поля и т. Д. По крайней мере, с новым дизайном API, требующим написания собственного сборщика, принцип проясняется, говоря разработчику избегать десериализации каждого результата из индекса. поскольку по умолчанию предоставляются только совпадающие идентификаторы документов и оценка.

15
ответ дан 30 November 2019 в 21:28
поделиться

Верхний сборщик документов сделает это за вас, например

TopDocs topDocs = searcher.search(qry, 10); 
int totalHits = topDocs.totalHits ;

Вышеупомянутый запрос подсчитает все совпадения, но вернет только 10.

{{ 1}}
11
ответ дан 30 November 2019 в 21:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: