代码之家  ›  专栏  ›  技术社区  ›  blue_code

solr-无法解析double的科学表示法

  •  0
  • blue_code  · 技术社区  · 6 年前

    为了进行测试,我尝试使用solrnet库将c的double.min(-1.79769313486232e+308)和double.max(1.79769313486232e+308)值写入solr triedublefield。两个双值都通过xml发送到solr服务器,该服务器输出以下日志:

    2018-06-06 13:27:46.840调试(qtp33524623-14)[x:test]o.a.s.u.p.allvaluesornonefieldmutatingupdateprocessor字段'd_doublemin'字符串值'-1.79769313486232e+308'不可变,因此不会对任何值进行突变 2018-06-06 13:27:46.840调试(qtp33524623-14)[x:test]o.a.s.u.p.parseDoubleFieldUpdateProcessorFactory值“1.79769313486232e+308”不可解析,因此不可变异;未解析字符:“e+308” 2018-06-06 13:27:46.840调试(qtp33524623-14)[x:test]o.a.s.u.p.allvaluesornonefieldmutatingupdateprocessor字段'd_doublemax'字符串值'1.79769313486232e+308'不可变,因此不会对任何值进行突变

    solrnet使用科学符号来传递这两个值,但是solr似乎无法解析它。当我检查添加的solr文档的内容时,这两个值分别设置为“-infinity”和“infinity”。

    但是,当我向solr写入nan、“-infinity”和“infinity”时,所有值都按预期存储。

    我还检查了C和Solr的双重规格,它们似乎不一样:

    是Solrnet的窃听器还是我遗漏了什么?

    1 回复  |  直到 6 年前
        1
  •  0
  •   blue_code    6 年前

    为了解决这个问题,我实现了自己的doublefieldserializer(派生自solrnets abstractfieldserializer)。我的doubleFieldSerializer改为在parse函数中调用obj.toString(“r”)。我对浮点值也做了同样的操作。

    我的解决方案的一个缺点是,我需要重写DefaultFieldSerializer才能注册FieldSerializer(类似于 Dans solution )

    我也把这个问题发到了github。所以也许将来会修好: https://github.com/SolrNet/SolrNet/issues/422