Apache Lucene: как сохранить индекс в файл?

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

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

Я видел следующий базовый код создания индекса в «Lucene за 5 минут»:

StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_40);
Directory index = new RAMDirectory();

IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_40, analyzer);

IndexWriter w = new IndexWriter(index, config);
addDoc(w, "Lucene in Action", "193398817");
addDoc(w, "Lucene for Dummies", "55320055Z");
addDoc(w, "Managing Gigabytes", "55063554A");
addDoc(w, "The Art of Computer Science", "9900333X");
w.close();


private static void addDoc(IndexWriter w, String title, String isbn) throws IOException {
    Document doc = new Document();
    doc.add(new TextField("title", title, Field.Store.YES));
    doc.add(new StringField("isbn", isbn, Field.Store.YES));
    w.addDocument(doc);
}
  • Как мне теперь сохранить в файл переменные analyzer, index и config?
  • Как я могу позже загрузить их из сохраненных файлов и использовать для запросов?

person SomethingSomething    schedule 22.06.2015    source источник


Ответы (1)


У меня есть решение - я поделюсь им здесь с вами:

Все изменение должно быть принято, вместо использования индекса RAMDirectory просто используйте FSDirectory.

Пример:

FSDirectory index = FSDirectory.open(Paths.get("C:\\temp\\index.lucene"));

В приведенном выше примере будет создана директория C:\temp\index.lucene и в нее будет записан индекс.

Теперь я могу выполнить шаги для запроса индекса, как показано в «Lucene за 5 минут»: http://www.lucenetutorial.com/lucene-in-5-minutes.html

Итак, если я хочу запустить запрос в другом приложении, я должен просто открыть индекс таким же образом, и я могу сразу же выполнять запросы к нему... Нет необходимости снова индексировать документы...

person SomethingSomething    schedule 22.06.2015