Lucene RangeQuery 没有正确过滤

2023-11-26

我在用着RangeQuery获取金额在 0 到 2 之间的所有文档。 当我执行查询时,Lucene 也会给我数量大于 2 的文档。我在这里缺少什么?

这是我的代码:

Term lowerTerm = new Term("amount", minAmount);
Term upperTerm = new Term("amount", maxAmount);

RangeQuery amountQuery = new RangeQuery(lowerTerm, upperTerm, true);

finalQuery.Add(amountQuery, BooleanClause.Occur.MUST);

这是我的索引中的内容:

doc.Add(new Field("amount", amount.ToString(), Field.Store.YES, Field.Index.UN_TOKENIZED, Field.TermVector.YES));

UPDATE:就像@basZero在他的评论中所说,从Lucene 2.9开始,你可以添加数字字段到您的文档。只需记住使用数字范围查询搜索时而不是 RangeQuery。

原答案

Lucene 将数字视为单词,因此它们的顺序是按字母顺序排列的:

0
1
12
123
2
22

这意味着对于 Lucene,12 介于 0 和 2 之间。如果您想要执行适当的数值范围,则需要对数字进行零填充索引,然后执行 [0000 TO 0002] 的范围搜索。 (您需要的填充量取决于预期的值范围)。

如果有负数,只需为非负数再添加一个零。 (编辑:错了错了错了。请参阅更新)

如果您的数字包含小数部分,请保持原样,并仅对整数部分进行零填充。

Example:

-00002.12
-00001

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Lucene RangeQuery 没有正确过滤 的相关文章

随机推荐