Java Lucene 6如何避免重复条目

Java Lucene 6如何避免重复条目,java,lucene,Java,Lucene,故事: 我需要搜索给定用户名查询的TransactionID列表,例如“Peter M*” 问题:如何保持存储的TransactionID的唯一性 我已使用以下文档填充索引: Document doc = new Document(); doc.add(new StoredField(TRANSACTION_ID, data.getTransactionId())); doc.add(new TextField(MARCHANT_NAME, data.getName(), Store.NO));

故事: 我需要搜索给定用户名查询的TransactionID列表,例如“Peter M*”

问题:如何保持存储的TransactionID的唯一性

我已使用以下文档填充索引:

Document doc = new Document();
doc.add(new StoredField(TRANSACTION_ID, data.getTransactionId()));
doc.add(new TextField(MARCHANT_NAME, data.getName(), Store.NO));
我尝试了allready的两种策略(避免重复条目)来添加新条目

  • IndexWriter.updateDocument,带有保存要存储的transactionId的术语
  • 搜索当前transactionId,将其删除并存储:

  • 您正在使用
    StoredField
    作为交易ID字段。这意味着它可以从索引中检索,但没有索引,无法搜索,因此,它不能用作
    updateDocument
    的键。改用
    StringField

    我明白了。所以也可以使用长尖点?我一般不推荐。要做到这一点,您需要避免
    更新文档
    ,而是先进行删除,然后再添加新文档,这样您就可以使用
    查询
    来匹配要删除的文档,而不是使用
    术语
    。我通常建议不要使用诸如
    LongPoint
    之类的数字字段作为标识符。如果标识符恰好由数字组成,请使用
    StringField
    。如果它实际上是一个数字(即,数字范围查询将非常有用),那么
    长点将是一个不错的选择。