Я индексирую данные и заметил, что поиск занимает много времени. Я храню содержимое и путь к файлу для файлов.
document.add(new StringField(SearchField.FILE_ABSOLUTE_PATH.getName(), fileData.getFilePath().toString(), Field.Store.YES));
document.add(new TextField(SearchField.CONTENT.getName(), fileData.getContent(), Field.Store.YES));
После завершения поиска он перебирает идентификаторы документов и извлекает путь к файлу, сохраненный в поле. Этот цикл занимает очень много времени.
final TotalHitCountCollector collector = new TotalHitCountCollector();
searcher.search(query, collector);
final TopDocs docs = searcher.search(query, Math.max(1, collector.getTotalHits()));
final ScoreDoc[] hits = docs.scoreDocs;
final SearchResult[] result = new SearchResult[hits.length];
for(int i = 0; i < result.length; i++)
{
final Document document = reader.document(hits[i].doc);
result[i] = new SearchResult(Paths.get(document.get(SearchField.FILE_ABSOLUTE_PATH.getName())));
}
Мне интересно, сколько времени уходит на получение документов, потому что приходится загружать все содержимое файла с диска, даже если у меня нет доступа к полю CONTENT
. Если это проблема, то мне, возможно, придется изменить способ хранения данных.
Что может быть причиной этого?