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