在本地测试搜索API时(Java SDK - 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]
我假设实现中有一些东西以精确度以外的粒度对数字进行索引或运行查询?我应该期待这些 结果会反映在真实的发动环境中吗?我可以依赖什么精度?
我想要解决的主要挑战是能够存储超出SearchApiLimits.MINIMUM_NUMBER_VALUE和SearchApiLimits.MAXIMUM_NUMBER_VALUE的数字,并且仍在对它们进行操作。目前,通过移动小数位来移动它们是我能够出现的唯一选择。是否有任何替代方法可以很好地控制首先翻译到双精度(java api中的类型)中丢失的精度,然后在引擎盖下发生什么?
答案 0 :(得分:0)
对于问题的第一部分,
我无法使用最新版本的API重现您的结果。如果你可以在1.9.7版本中重现你的结果,那么发布一些代码,我会再看看它。开发服务器和生产服务器的行为应该相同,如果没有,那就是一个bug。
绕过限制的一种替代方法是不将它们存储为数字而是存储为原子。但是,您将无法应用&lt;,&gt;,&lt; =,...,仅运算符相等。
答案 1 :(得分:0)
应该注意,本地FTS与App Engine服务器的代码不同。我认为这是lucene或其他什么。