在我的ES中,我有一个这样的模式类型:
{
"index_v1":{
"mappings":{
"fuas":{
"properties":{
"comment":{
"type":"string"
},
"matter":{
"type":"string"
},
"metainfos":{
"properties":{
"department":{
"type":"string"
},
"processos":{
"type":"string"
}
}
}
}
}
}
}
}
很快,fuas
类型有两个属性comment
和matter
以及一个内部(非嵌套)对象metainfos
,其中包含多个属性department
和{{1} }}
我想知道有多少processos
被告知其出现次数。
想象一下文件metainfos' fields
doc1
和metainfos: {department: "d1"}
doc2
。
然后我想得到:metainfos: {department: "d2", processos: "p1"}
。
修改
作为一个内部对象,由于ES是无模式文档,因此'{department: 2, processos: 1}
内部对象可以通知或不通知多个字段。
所以,metainfos
和doc1's metainfos {field1: 1, field3: 3}
以及doc2's metainfos {field2: 1, field4: 5}
。
我想得到:doc3's metainfos {field1:2, field4: 2, field5: 1}
。我认为解决这个问题的主要问题是我如何能够找到我不知道存在的字段。
我测试了两个文件:
{field1: 2, field2: 1, field3: 1, field4: 2, field5: 1}
我用这个命令对此进行了测试:
{
"hits":{
"total":2,
"max_score":1.0,
"hits":[
{
"_source":{
"matter":"FUA2",
"comment":null,
"metainfos":[
{
"department":"d1"
}
]
}
},
{
"_source":{
"matter":"FUA1",
"comment":"vcvcvc",
"metainfos":[
{
"department":"d1"
},
{
"processos":"p1"
}
]
}
}
]
}
}
结果是:
curl -XGET 'http://localhost:9201/living_team/fuas/_search?pretty' -d '
{
"size": 0,
"aggregations" : {
"followUpActivity.metainfo.department" : {
"terms" : {
"field" : "metainfos.*"
}
}
}
}
'
答案 0 :(得分:0)
您可以使用value_count
aggregation:
{
"size": 0,
"aggs" : {
"dept" : {
"value_count" : { "field" : "metainfos.department" }
},
"proc" : {
"value_count" : { "field" : "metainfos.processos" }
}
}
}
答案 1 :(得分:0)
您需要使用嵌套字段,否则您的内部字段在metainfos对象中不会“一起”显示。