- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 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/
试图找到范围查询的解决方案使用 QueryBuilders.rangeQuery 问题:DateFrom 可以为空或大于今天DateTill 可以为 null 或小于今天剩余数量可以为 null 或值
我正在使用 RangeQuery 获取数量在 0 到 2 之间的所有文档。当我执行查询时,Lucene 也会给我数量大于 2 的文档。我在这里缺少什么? 这是我的代码: Term lowerTerm
我已经实现了一个 Lucene.NET (2.9) 搜索具有允许我在一个月和一年内传递的查询参数的事件 - 然后返回该月内运行的所有事件(即,如果我在 2013 年 12 月通过它将匹配在 12 月的
基本上,我希望能够使用以下查询“短语查询”AND date:[20180101 TO 20181231]来查询索引。我尝试使用 MultiFieldQueryParser,但出现以下错误: 线程“ma
我正在使用高级 java rest 客户端 (6.5),我需要根据某个日期范围过滤数据 - 假设,我在同一个索引和 2 个文档中有这 4 个文档(添加了 postman 图像)'没有 publish_
嗨,我正在尝试在 ElasticSearch 中查询,其中我想使用 multiMatchQuery 来获取数据来搜索字符串,并使用 rangequery 来过滤日期之间的数据 Calendar com
我是一名优秀的程序员,十分优秀!