Lucene's IndexWriter разъяснения - PullRequest
1 голос
/ 31 января 2012

Пытаясь найти ошибку в нашем проекте, я нашел несколько вопросов об API индексации Lucene без ответа: Первый связан со следующим фрагментом:

IndexWriter writer = //open an index for writings.
// ... do some heavy updates (inserts and deletes) to the index using 'writer'

IndexReader reader = writer.GetReader();
long[] idsArray = Field_Cache_Fields.DEFAULT.GetLongs(reader, "ID_Field");  
//under the assumption that ALL indexed documents contain field with the name "ID_Field".

Обещано ли API Lucene, что читатель, который я получу, ВСЕГДА получит обновленный, даже если индекс не закоммутирован? Просто чтобы убедиться, что мой ответ ясен: каждый удаленный документ не будет виден читателю, и каждый добавленный документ будет ..

Второй вопрос связан со следующим фрагментом:

IndexWriter writer = //open an index for writing, but dont change a thing - just commit meta data.
writer.Commit["Hello"] = "World";
writer.Commit();

Обещано ли, что метаданные будут добавлены в индекс, даже если я открыл его без фактического изменения индекса?

В обоих вопросах я буду рад узнать, что подразумевается под API, а также, если кто-то узнает о проблемах (каких-либо ошибках?), Специфичных для Lucene .Net 2.9.2

спасибо, ребята!

1 Ответ

1 голос
/ 31 января 2012

Первый вопрос: да

Из документа:

Эксперт: возвращает читателя только для чтения, охватывающего все зафиксированные и не зафиксированные изменения индекса.Это обеспечивает поиск "почти в реальном времени", поскольку изменения, сделанные во время сеанса IndexWriter, можно быстро сделать доступными для поиска, не закрывая программу записи и не вызывая #commit.Обратите внимание, что это функционально эквивалентно вызову {#commit}, а затем использованию IndexReader # open для открытия нового читателя.Но время turarnound этого метода должно быть быстрее, так как он избегает потенциально дорогостоящего #commit.

...