我在elasticsearch中有以下类型(只是其中的一部分):
"diff":[
{"name":"state",
"oldValue":"online",
"newValue":"offline"
},
{"name":"cost",
"oldValue":2000,
"newValue":5000
}
]
diff类型是name
,oldValue
和newValue
的数组。现在,oldValue
可以包含字符串值和整数值。我想要cost
高于2000的时间范围或state
在线的时间范围等分析。可以有数百个这样的属性。
问题是我只能给oldValue和newValue一个类型,无论是字符串还是整数。
我该如何解决这个问题?
答案 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"]
}