繁体   English   中英

Lucene删除索引,Java

[英]Lucene delete index, Java

我使用Lucene库进行搜索,当我更新要搜索的对象中的信息时,需要重新索引该对象。 因此,我执行以下操作:

    IndexWriterConfig config = new IndexWriterConfig(OffersSearchEJB.VERSION, OffersSearchEJB.ANALYZER);
    config.setOpenMode(IndexWriterConfig.OpenMode.APPEND);
    config.setRAMBufferSizeMB(64);
    config.setMaxBufferedDocs(2000);

    IndexWriter indexWriter;
    try {
        indexWriter = new IndexWriter(OffersSearchEJB.DIRECTORY, config);
        Document doc = new Document();
        IntField idField = new IntField("id", 0, Field.Store.YES);
        TextField shortTitleField = new TextField("shortTitle", "", Field.Store.NO);
        TextField titleField = new TextField("title", "", Field.Store.NO);
        TextField termsField = new TextField("terms", "", Field.Store.NO);
        TextField featuresField = new TextField("features", "", Field.Store.NO);
        TextField descriptionField = new TextField("description", "", Field.Store.NO);
        // deleting old index
        Term term = new Term("id", offer.getId().toString());
        indexWriter.deleteDocuments(term);
        // storing new index
        OffersSearchEJB.indexOffer(offer, indexWriter, doc, idField, shortTitleField, titleField, termsField, featuresField, descriptionField);
        indexWriter.commit();
        indexWriter.close();
    } catch (IOException ex) {
        Logger.getLogger(OfferMDB.class.getName()).log(Level.SEVERE, null, ex);
    }

换句话说,我只是添加新的Object并删除旧的Object。 向索引添加新对象效果很好,但是此代码不会删除旧索引。 我也尝试了indexWriter.updateDocument(term, doc);

我使用Lucene 4.7,JDK 1.6和Jboss 6.4

这不起作用,因为您的ID是一个IntField,因此它是经过编码的,而不是作为简单术语索引的。

这里有两个好的解决方案:

  1. 将您的idField更改为StringField 如果您的ID仅用作标识符,我绝对会推荐这样做。 即使该字段可能由数字组成,但是如果您不将其视为数字(例如使用范围查询或对其进行排序),也不要将其索引为数字。

  2. 使用数字查询而不是术语来删除文档,例如:

     Query query = NumericRangeQuery.newIntRange("id", offer.getId(), offer.getId(), true, true); indexWriter.deleteDocuments(query); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM