elasticsearch聚合哈希的唯一条目并查找所有标记

2024-09-29 21:28:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个索引中有两组哈希,另一个标签作为附加字段,如下所示:

索引:哈希-*

sha1-c            tag
abcdefg12345      collect
abcdefg12345      collect
bcdefgh12345      collect
cdefghi           collect


sha1-m       tag
abclefg      bad
abcgefg      bad
cdefghi      bad

如何在索引中找到两个标记之间的所有重复项?我更喜欢kibana中的datatable或可视化,但elasticsearch聚合/查询就足够了。你知道吗

格式

t  _index     sha1-c
t  _type      sha1-c
t  sha1-c     cdefghi
t  tag        sha1-c

t  _index     sha1-m
t  _type      sha1-m
t  sha1-m     cdefghi
t  tag        sha1-m  

预期结束状态:

hash_matches 
cdefghi

Tags: 标记indextagtype标签sha1badcollect
1条回答
网友
1楼 · 发布于 2024-09-29 21:28:34

首先,两个索引具有相同的字段名很重要。此外,为了简单起见,tagsha-1c字段应该有一个子字段(或其本身)应该是keyword,这样terms聚合就不会在一些错误分析的文本上跳闸。你知道吗

下面是我的建议(用5.3测试)。在2.x中,可能需要稍微更改脚本。在1.x中,此解决方案将不起作用,因为那里没有可用的管道聚合。你知道吗

解决方案基本上是在sha值上创建一个terms聚合,然后对每个sha计算它找到的不同标记。如果这些标签计数大于2,那么sha就有两个标签。现在,如果我们知道每个sha值在每个索引中只找到一次,它将是一个更为稳定的解。是这样吗?如果是这样,下面的tag字段上的聚合应该转换为_index字段上的聚合。你知道吗

DELETE sha1-*
PUT sha1-c
{
  "mappings": {
    "sha1-c": {
      "properties": {
        "sha1-c": {
          "type": "keyword"
        },
        "tag": {
          "type": "keyword"
        }
      }
    }
  }
}
PUT sha1-m
{
  "mappings": {
    "sha1-m": {
      "properties": {
        "sha1-c": {
          "type": "keyword"
        },
        "tag": {
          "type": "keyword"
        }
      }
    }
  }
}

POST /sha1-c/sha1-c/_bulk
{"index":{}}
{"sha1-c":"abcdefg12345","tag":"collect"}
{"index":{}}
{"sha1-c":"abcdefg12345","tag":"collect"}
{"index":{}}
{"sha1-c":"bcdefgh12345","tag":"collect"}
{"index":{}}
{"sha1-c":"cdefghi","tag":"collect"}

POST /sha1-m/sha1-m/_bulk
{"index":{}}
{"sha1-c":"abclefg","tag":"bad"}
{"index":{}}
{"sha1-c":"abcgefg","tag":"bad"}
{"index":{}}
{"sha1-c":"cdefghi","tag":"bad"}


GET /sha1-*/_search
{
  "size": 0, 
  "aggs": {
    "myField": {
      "terms": {
        "field": "sha1-c"
      },
      "aggs": {
        "count_tags": {
          "cardinality": {
            "field": "tag"
          }
        },
        "values_bucket_filter_by_tags_count": {
          "bucket_selector": {
            "buckets_path": {
              "count": "count_tags"
            },
            "script": "params.count >= 2"
          }
        }
      }
    }
  }
}

相关问题 更多 >

    热门问题