проблема обновления Lucene - PullRequest
2 голосов
/ 25 июля 2010

Я использую эту функцию для обновления индекса ..

    private static void insert_index(String url)throws Exception
{
 System.out.println(url);
    IndexWriter writer = new IndexWriter(
            FSDirectory.open(new File(INDEX_DIR)),
            new StandardAnalyzer(Version.LUCENE_CURRENT),
            true,
            IndexWriter.MaxFieldLength.UNLIMITED);
    Document doc;
    String field;
    String text;


    doc = new Document();

    field = "url";
    text = url;
    doc.add(new Field(field, text, Field.Store.YES, Field.Index.ANALYZED));



    field = "tags";
    text = "url";
    doc.add(new Field(field, text, Field.Store.YES, Field.Index.ANALYZED));

    writer.addDocument(doc);
    writer.commit();
    writer.close();



}

он индексирует больше URL, и если я ищу поле с URL, он показывает только последний индексированный URL ....

1 Ответ

1 голос
/ 25 июля 2010

При создании нового индекса в первый раз параметр create для конструктора IndexWriter должен иметь значение true.С этого момента для него должно быть установлено значение false, в противном случае ранее сохраненное содержимое индекса будет переопределено.Я бы изменил свой код для определения файлов индекса перед созданием нового экземпляра IndexWriter.

Этот код можно использовать для тренировки, если существуют файлы индекса

private bool IndexExists(string sIndexPath)
{
    return IndexReader.IndexExists(sIndexPath))
}

Затем создайте экземпляр IndexWriterкак это:

IndexWriter writer = new IndexWriter(
    FSDirectory.open(new File(INDEX_DIR)),
    new StandardAnalyzer(Version.LUCENE_CURRENT),
    IndexExists(INDEX_DIR) == false, // <-- This is what I mean
    IndexWriter.MaxFieldLength.UNLIMITED);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...