2017-04-06 50 views
2

我有兩套單指數哈希與不同的標籤像下面的附加字段:elasticsearch骨料獨特條目,並找到所有標籤

指數:hashes- *

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


sha1-m  tag 
abclefg  bad 
abcgefg  bad 
cdefghi  bad 

如何我可以在索引中找到兩個標籤之間的所有重複項嗎?我更喜歡kibana中的數據表或可視化,但彈性搜索聚合/查詢就足夠了。

FORMAT

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 
+0

這兩個不同的領域? 'sha1-c'和'sha1-m' –

+0

查看上面的表 – johnnyb

+0

查看上面所以,你有兩個不同的索引?你有點想加入他們(如在內部聯接)? –

回答

2

首先,重要的是你的兩個指數具有相同的字段名。另外,爲了簡單起見,tagsha-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" 
      } 
     } 
     } 
    } 
    } 
} 
+0

今天要測試這個,謝謝你的幫助。 – johnnyb