首先,重要的是你的兩個指數具有相同的字段名。另外,爲了簡單起見,tag
和sha-1c
字段應該有一個子字段(或它們自己)應該是keyword
s,以便terms
聚合不會在某些錯誤分析的文本上發生跳動。
這是我的建議(測試5.3)。在2.x中,可能需要稍微更改腳本。在1.x中,此解決方案將無法工作,因爲沒有可用的管道聚合。
該解決方案基本上創建一個terms
聚合sha值,然後爲每個沙它計數它找到的不同標籤。如果這些標籤的數量高於兩個,那麼就有兩個標籤。現在,如果我們知道,如果在每個索引中只發現一次sha值,那將是一個更穩固的解決方案。它是這樣嗎?如果是這樣,下面的tag
字段上的聚合應該被轉換爲字段上的聚合。
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"
}
}
}
}
}
}
這兩個不同的領域? 'sha1-c'和'sha1-m' –
查看上面的表 – johnnyb
查看上面所以,你有兩個不同的索引?你有點想加入他們(如在內部聯接)? –