为“ +” RFC7159配置ElasticSearch?

时间:2018-06-26 19:47:25

标签: elasticsearch

是否可以将ElasticSearch配置为接受较新的JSON规范?

我需要在JSON中表示正数,负数和无符号数,以便在ElasticSearch中建立索引。

例如

[
    { "confidence":   0},
    { "confidence":   0.417763},
    { "confidence":   -0.296771},
]

RFC 7158将支持这一点:

minus = %x2D                ; -
plus  = %x2B                ; +
zero  = %x30                ; 0

我找不到相应的配置,所以我有一个解决方法。 将每个名为“信心”的字段都转换为

  • 没有负数(0-1)的范围

    {"type": "integer_range", "gte":0, "lte":1}
    
  • 对象中的scaled_float,它使用单独的字段指示符号

    {
        "properties": {
          "confidence": {
            "type": "scaled_float",
            "scaling_factor": 10000000
          },
          "negative": {
            "type": "boolean"
          }
        }
    }
    

json-schema在PUT映射中似乎被接受。

{
  "$schema": "http://json-schema.org/schema#",
  "mappings": {
    ...
   }
{

{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "bakeoff-rfc"
}

我正在使用ES 6.2.2,这是我的云提供商所支持的最新版本。

1 个答案:

答案 0 :(得分:2)

您可以做的是将您的置信度字段映射为floatdouble,然后在源文档中将它们添加为字符串。

像这样创建索引映射:

PUT rfc7158
{
  "mappings": {
    "doc": {
      "properties": {
        "confidence": {
          "type": "float"
        }
      }
    }
  }
}

然后像这样添加您的数据,就不会出错:

POST rfc7158/doc/_bulk
{ "index": {}}
{ "confidence": "0" }
{ "index": {}}
{ "confidence": "-0.296771" }
{ "index": {}}
{ "confidence": "+0.8723734" }
{ "index": {}}
{ "confidence": "0.7672323" }

运行以下聚合时,您会看到+0.8723734是最大值,-0.296771是期​​望的最小值

POST rfc7158/_search  
{
  "size": 0,
  "aggs": {
    "minconfidence": {
      "min": {
        "field": "confidence"
      }
    },
    "maxconfidence": {
      "max": {
        "field": "confidence"
      }
    }
  }
}