gpt4 book ai didi

elasticsearch - 汇总参数的不同值

转载 作者:行者123 更新时间:2023-12-02 23:31:41 26 4
gpt4 key购买 nike

我正在解析URL,例如:

example.org/index.html?parameter_1=value_1&parameter_2=value_2
example.org/index.html?parameter_1=value_1&parameter_2=value_3
example.org/index.html?parameter_1=value_4&parameter_2=value_3
example.org/index.html?parameter_1=value_5&parameter_2=value_4

url有更多的参数,它们并不总是相同的,只是为了简化。

当parameter_1等于value_1时,我想获取parameter_2的不同值,以及每个值有多少次匹配(在这种情况下为“value_2” / 1和“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" }
]
}

但是我相信,即使我还没有找到一种更好的方法。

任何的想法 ?

最佳答案

我相信,如果将Nested AggregationFilter Aggregation结合使用,则可以实现所需的结果。
nested聚合允许您聚合嵌套文档。但是,每个嵌套文档都包含一个“名称”和一个“值”。由于您仅对“parameter_2”的不同值感兴趣,因此需要过滤“名称”​​为“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
}
]
}
}
}
}
}

关于elasticsearch - 汇总参数的不同值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35699656/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com