我正在解析以下网址:
example.org/index.html?parameter_1=value_1¶meter_2=value_2
example.org/index.html?parameter_1=value_1¶meter_2=value_3
example.org/index.html?parameter_1=value_4¶meter_2=value_3
example.org/index.html?parameter_1=value_5¶meter_2=value_4
url有更多参数,它们并不总是相同,只是为了简化。
我想在parameter_1等于value_1 时得到不同的parameter_2值以及每个值有多少命中(在这种情况下" value_2" / 1和&# 34; VALUE_3" / 1)
这是我的映射:
"my_index" : {
"mappings" : {
"urls" : {
...
"page" : { "type" : "string", "index" : "not_analyzed" },
"parameters" : {
"type" : "nested",
"properties" : {
"name" : { "type" : "string", "index" : "not_analyzed" },
"value" : { "type" : "string", "index" : "not_analyzed" }
}
}
}
}
}
}
这给我这样的条目:
{
"page": "example.org/index.html",
"parameters": [
{ "name": "parameter_1", "value": "value_1" },
{ "name": "parameter_2", "value": "value_2" }
]
}
如果我想在页面上这样做,我可以像这样进行过滤聚合:
{
"size": 0,
"aggs": {
"sitecodes": {
"filter": {
"nested": {
"path": "parameters",
"query": {
"bool": {
"must": [
{
"term": {
"parameters.name": "parameter_1"
}
},
{
"term": {
"parameters.value": "value_1"
}
}
]
}
}
}
},
"aggs": {
"pages": {
"terms": {
"field": "page"
}
}
}
}
}
}
但我无法找到一种方法对parameter_2的值进行相同的操作。
作为一种解决方法,我可以复制映射中的信息,以便输入如下条目:
{
"page": "example.org/index.html",
"parameter_1": "value_1",
"parameters": [
{ "name": "parameter_1", "value": "value_1" },
{ "name": "parameter_2", "value": "value_2" }
]
}
但我相信有更好的方法,即使我还没有找到它。
有什么想法吗?
答案 0 :(得分:1)
我相信如果您使用Nested Aggregation和Filter Aggregation的组合,您可以获得所需的结果。
nested
聚合允许您在嵌套文档上进行聚合。但是,每个嵌套文档都包含一个" name"和"价值"。由于您只对" parameter_2"的不同值感兴趣,因此您需要过滤" name"是" parameter_2"。最后,您可以对"值"进行terms
聚合。字段。
这是一个对我有用的例子:
{
"size": 0,
"aggs": {
"sitecodes": {
"filter": {
"nested": {
"path": "parameters",
"query": {
"bool": {
"must": [
{
"term": {
"parameters.name": "parameter_1"
}
},
{
"term": {
"parameters.value": "value_1"
}
}
]
}
}
}
},
"aggs": {
"my_nested": {
"nested": {
"path": "parameters"
},
"aggs": {
"parmFilter": {
"filter": {
"term": {
"parameters.name": "parameter_2"
}
},
"aggs": {
"groupByValue": {
"terms": {
"field": "parameters.value",
"size": 10
}
}
}
}
}
}
}
}
}
}
它按预期返回了以下结果(使用您的示例数据):
...
"aggregations": {
"sitecodes": {
"doc_count": 2,
"my_nested": {
"doc_count": 4,
"parmFilter": {
"doc_count": 2,
"groupByValue": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "value_2",
"doc_count": 1
},
{
"key": "value_3",
"doc_count": 1
}
]
}
}
}
}
}