Совершенные изменения видимости в Lucene.Лучшие практики - PullRequest
5 голосов
/ 14 января 2011

Я использую Lucene 3.0.3. Я создал bean-компонент Spring с целью инкапсулировать все операции с одним и тем же индексом.

public class IndexOperations {

    private IndexWriter writer;
    private IndexReader reader;
    private IndexSearcher searcher;

    public void init() {...}
    public void destroy() {...}

    public void save(Document d) {...}
    public void delete(Document d) {...}
    public List<Document> list() {...}

}

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

Как лучше всего подойдет этот типичный сценарий?

Ответы [ 2 ]

4 голосов
/ 14 января 2011

Вы должны держать писателя всегда открытым, но не сохраняйте читателя / искателя. Когда вам нужен поисковик, просто выполните IndexSearcher srch = new IndexSearcher(writer.getReader()); Таким образом, поисковик получит самые последние изменения, даже если они еще не записаны на диск (что дает вам лучшее из обоих миров).

2 голосов
/ 14 января 2011

Для такого случая использования я настоятельно рекомендую Компас , который является абстракцией более высокого уровня вокруг Lucene.В зависимости от вашего вопроса, он обеспечивает лучшее параллельное управление, плюс транзакции, что устраняет необходимость вручную управлять вашей проблемой чтения / записи / поиска.Это довольно умные вещи, и, честно говоря, это может быть довольно барокко, но это хорошее решение проблемы.

С другой стороны, он основан на Lucene 2.9, а не 3.0, поэтому он не так быстр, как 3.0может быть, и он больше не поддерживается активно, но он стабилен, довольно хорошо документирован и намного проще в использовании, чем сырой Lucene.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...