Лучший способ извлечь определенное поле из всех документов, возвращаемых поиском Lucene - PullRequest
2 голосов
/ 25 марта 2010

Мне было интересно, как лучше всего извлечь определенное поле из всех документов, возвращаемых поисковиком Lucene.

Справочная информация: у каждого документа есть поле даты (написано), и я хотел бы показатьграфик всех найденных документов, поэтому мне нужно извлечь поле даты (дня) всех документов, которые я нахожу с помощью поиска.

В настоящее время я извлекаю каждый документ, используя Searcher.doc (int, FieldSelector), имеющийселектор извлекает только определенное поле.

Я проиндексировал 250 тыс. документов, сам поиск не занимает много времени и возвращает около 10 тыс. идентификаторов документов.

Однако их получение занимает более 20 секунд.

Что можно сделать, чтобы ускорить процесс, но при этом получить все нужные мне значения?

1 Ответ

4 голосов
/ 25 марта 2010

Лучший способ получить значения поля - использовать FieldCache. Например, если значение поля является строкой, вы можете получить значения следующим образом.

String[] fieldValues = FieldCache.DEFAULT.getStrings(indexReader, "FieldName")

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

...