gpt4 book ai didi

c# - Lucene RangeQuery 过滤不当

转载 作者:太空狗 更新时间:2023-10-29 21:37:18 25 4
gpt4 key购买 nike

我正在使用 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));

最佳答案

更新:正如@basZero 在他的评论中所说,从 Lucene 2.9 开始,您可以添加 numeric fields到你的文件。请记住使用 NumericRangeQuery在搜索时代替 RangeQuery。

原始答案

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

0
1
12
123
2
22

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

如果您有负数,只需为非负数添加另一个零。 (编辑:错误错误错误。查看更新)

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

例子:

<罢工>

<罢工>
-00002.12
-00001

<罢工>

000000
000001
000003.1415
000022

更新:负数有点棘手,因为 -1 按字母顺序排在 -2 之前。 This article给出了在 Lucene 中处理负数和一般数字的完整解释。基本上,您必须将数字“编码”为使项目顺序有意义的内容。

关于c# - Lucene RangeQuery 过滤不当,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/708075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com