gpt4 book ai didi

java - Lucene删除索引,Java

转载 作者:行者123 更新时间:2023-12-02 03:33:26 35 4
gpt4 key购买 nike

我使用 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);
}

换句话说,我只是添加新对象并删除旧对象。将新对象添加到索引效果很好,但此代码并没有删除旧索引。我也尝试过 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);

关于java - Lucene删除索引,Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37747499/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com