По сути, я просто хочу сделать много поисков по заданному индексу lucene.
Поэтому я создал класс Data с последними полями 'analyzer', 'reader', 'searcher' и 'parser' (все они правильно инициализированы в конструкторе). Класс также предоставляет метод поиска для поиска по индексу. Это все показано в коде ниже.
Проблема, однако, в том, что память постепенно заполняется после многих вызовов «поиска» (с разными запросами). Я не проверял, что происходит, когда всегда используется один и тот же запрос. Я уже искал возможные ответы, и, кажется, лучше всего держать поисковик и т. Д. Открытым для разных поисков, так что я думаю, что это не проблема. Есть другие идеи?
Спасибо, Иоахим.
(пример) код:
public class Data {
private final Analyzer analyzer;
private final IndexReader reader;
private final IndexSearcher searcher;
private final QueryParser parser;
public Data(String indexPath, Analyzer analyzer) throws IOException {
this.analyzer = analyzer;
Directory directory = FSDirectory.open(indexPath);
reader = new FilterIndexReader(IndexReader.open(directory, true));
directory.close();
searcher = new IndexSearcher(reader);
parser = new QueryParser(Version.LUCENE_CURRENT,
FieldName.CONTENT, analyzer);
}
public TopDocs search(String line, Integer maxHits) throws ... {
Query query = parser.parse(QueryParser.escape(line));
return searcher.search(query, maxHits);
}
}