Lucene如何删除int字段

时间:2016-03-14 21:31:40

标签: lucene

我想删除一个名为“no”的int字段中包含某个数字的文档。我的代码是

//add it before
Document doc = new Document();
doc.add(new IntField("no", number, Field.Store.YES));
w.addDocument(doc);

//bunch of code in the middle

// Now want to delete that doc
w.deleteDocuments(new Term("no", number)) // w is a IndexWriter
w.commit();

但问题是Term只将String作为构造函数。那么在这种情况下我应该将int转换为String吗?

1 个答案:

答案 0 :(得分:1)

我只是使用Query而不是Term删除。像这样:

Query deleteQuery = NumericRangeQuery.newIntRange("no", number, number, true, true);
writer.deleteDocuments(deleteQuery);

如果您愿意,可以使用NumericUtils将int转换为索引字符串表示形式(这不是我建议的方法。此API,如文档中所述,用于< em>仅供内部使用):

BytesRefBuilder builder = new BytesRefBuilder();
NumericUtils.intToPrefixCoded(number, 0, builder);
writer.deleteDocuments(new Term("no", builder.toBytesRef()));