java - Lucene 6 如何避免重复条目

标签 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));

我已经尝试了两种策略(以避免重复条目)来添加新条目。

  1. IndexWriter.updateDocument,其中包含要存储的 transactionId 的 Term。
  2. 搜索当前transactionId,删除并存储:

最佳答案

您正在使用 StoredField 作为 TRANSACTION_ID 字段。这意味着它可以从索引中检索,但未编入索引且无法搜索,因此它不能用作 updateDocument 的键。请改用 StringField

关于java - Lucene 6 如何避免重复条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44386004/

相关文章:

java - 虽然 Java 中的 try/catch 打破了 true 循环

Java JAXB 编码到 DOM 文档

elasticsearch - Lucene 自定义相似度/评分

java - 加载分析器时 Lucene ClassNotFoundError

java - 将上下文传递给多个线程是否安全?

java - 使用原始参数模拟方法时 Mockito 中的 NullPointerException

java - 使用 SSLSockets 的正确方法是什么?为什么会收到这些错误?

java - Lucene 6 - 使用术语词汇表存储数字字段的推荐方法

elasticsearch - 带有@符号和通配符的Elasticsearch查询字符串查询

solr - 使用空格、连字符、大小写和标点符号的各种组合进行搜索