Java Appengine全文搜索-搜索API中数字字段的精度

Java Appengine全文搜索-搜索API中数字字段的精度,java,google-app-engine,full-text-search,Java,Google App Engine,Full Text Search,在本地测试搜索api(JavaSDK-1.9.6)时,我得到了意想不到的结果,对较小的数字进行了相等和范围检查 例如,如果我使用以下字段为三个文档编制索引: numeric: 0.0011 numeric: 0.0022 numeric: 0.0033 对于以下查询,我得到以下结果: numeric: 0.0033 -> [] numeric= 0.0033 -> [] numeric>= 0.0033 -> [] numeric < 0.0033 -> [

在本地测试搜索api(JavaSDK-1.9.6)时,我得到了意想不到的结果,对较小的数字进行了相等和范围检查

例如,如果我使用以下字段为三个文档编制索引:

numeric: 0.0011
numeric: 0.0022
numeric: 0.0033
对于以下查询,我得到以下结果:

numeric: 0.0033 -> []
numeric= 0.0033 -> []
numeric>= 0.0033 -> []
numeric < 0.0033 -> [document1, document2, document3]
numeric < 0.0022 -> [document1, document2]
numeric < 0.0021 -> [document1, document2]
numeric < 0.002 -> [document1]
数字:0.0033->[]
数值=0.0033->[]
数值>=0.0033->[]
数值<0.0033->[文档1、文档2、文档3]
数值<0.0022->[文档1,文档2]
数值<0.0021->[文档1,文档2]
数值<0.002->[文件1]
我假设在实现中有某种东西,它以非精确的粒度对数字进行索引或运行查询?我应该期待这些吗 要在真实的appengine环境中反映结果?我能依靠什么样的精度


我试图解决的主要挑战是存储超出SearchApiLimits.MINIMUM_NUMBER_值和SearchApiLimits.MAXIMUM_NUMBER_值范围的数字并仍对其进行操作的能力。目前,通过移动小数位数来移动它们是我能想到的唯一选择。有没有其他方法可以很好地控制在转换为double(java api中的类型)的过程中会损失多少精度,然后在引擎盖下发生什么?

对于问题的第一部分


我无法用最新版本的API重现您的结果。如果你能在版本1.9.7中重现你的结果,那么发布一些代码,我会再看一遍。开发服务器和生产服务器的行为应该是相同的,如果不是,那就是一个bug


绕过这些限制的另一种方法是不将它们存储为数字,而是存储为原子。但是您将无法应用,应该注意,本地FTS与App Engine服务器的代码不同。我想是lucene什么的。

这里有一个要点,显示了我所看到的失败。我对它提出了一个错误。这至少会产生更好的文档。到目前为止,粒度似乎是2。你能进一步说明2的粒度意味着什么吗?与0.0002中一样,还是将数值结果分组为两组?如果您能够这样做,那么这是否适用于开发服务器和appengine环境本身,或者仅适用于开发服务器?开发服务器和生产环境并不共享相同的实现。但是,如果它们的行为不一样,则会被视为错误,可以在此处存档:。我仍然无法复制'numeric=0.0033',但我确实看到了您对'I've file a issue'的一些结果,但根据以前的经验,直接将其发送到/dev/null可能会更快。谢谢你的帮助。