Использование FieldSelector при поиске с Lucene - PullRequest
1 голос
/ 21 апреля 2010

Я ищу статьи в PubMed через Lucene. Каждая из 20 000 000 статей содержит реферат с ~ 250 словами и идентификатором.

В данный момент я сохраняю результаты поиска, каждый из которых занимает несколько секунд, в объекте TopDocs. Поиски могут найти тысячи статей. Мне просто интересен идентификатор статьи. Загружает ли Lucene тезисы внутри TopDocs?

Если это так, я могу предотвратить такое поведение через FieldSelectors или FieldSelectors работает только с IndexReader и не работает с IndexSearcher?

Ответы [ 3 ]

2 голосов
/ 21 апреля 2010

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

String[] allIDs = FieldCache.DEFAULT.getStrings(indexReader, "IDFieldName")

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

2 голосов
/ 21 апреля 2010

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

Если у вас проблемы с производительностью, вот еще один вопрос, который может вам помочь:

Оптимизация производительности Lucene

1 голос
/ 21 апреля 2010

Вы на правильных линиях.

Попробуйте использовать SetBasedFieldSelector при извлечении документа из индекса.

Как заметил другой автор, итерация попаданий вернет объект ScoreDoc. Это даст вам идентификатор документа, который можно использовать для извлечения документа с использованием IndexReader, связанного с IndexSearcher.

Если IO является проблемой из-за загрузки полей, которые вас не интересуют, вас ждет приятный сюрприз.

Надеюсь, это поможет,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...