我想删除一个名为“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吗?
答案 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()));