用于在elasticsearch中获取分析数据的正确类型

时间:2014-10-28 07:27:55

标签: elasticsearch

我在elasticsearch中有以下类型(只是其中的一部分):

"diff":[
  {"name":"state",
      "oldValue":"online",
      "newValue":"offline"
  },
  {"name":"cost",
      "oldValue":2000,
      "newValue":5000
  }
]

diff类型是nameoldValuenewValue的数组。现在,oldValue可以包含字符串值和整数值。我想要cost高于2000的时间范围或state在线的时间范围等分析。可以有数百个这样的属性。

问题是我只能给oldValue和newValue一个类型,无论是字符串还是整数。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

没有使用某些数组进行测试(因为你没有提到它的嵌套或对象),但我做了一个简单的字段:

PUT /some_index
{
  "mappings": {
    "some_type": {
      "properties": {
        "name": {
          "type": "string",
          "copy_to": "name.int"
        },
        "name.int": {
          "type": "integer",
          "ignore_malformed": true
        }
      }
    }
  }
}

然后索引一些测试数据:

POST /some_index/some_type/1
{"name":"2000"}
POST /some_index/some_type/2
{"name":"testing"}
POST /some_index/some_type/3
{"name":2000}

并测试:

GET /some_index/some_type/_search
{
  "query": {
    "range": {
      "name.int": {
        "from": 1999
      }
    }
  },
  "fields": ["name", "name.int"]
}

还有一些测试(针对该领域的“版本”):

GET /some_index/some_type/_search
{
  "query": {
    "bool": {
      "should": [
        {"range": {
          "name.int": {
            "from": 1999
          }
        }},
        {"match": {
          "name": "testing"
        }}
      ]
    }
  },
  "fields": ["name", "name.int"]
}