簡體   English   中英

通過文本字段聚合和排序,並在Elasticsearch中串聯其他文本字段

[英]Aggregate and Sort by a text field and concatenate other text fields in Elasticsearch

在Elasticsearch中,如何通過一個文本字段進行聚合和排序 ,以及如何將其他文本字段的字段值連接起來,例如, ;

串聯時,我的意思是串聯所有匯總文檔中同一字段的值, 而不是同一文檔中不同字段的值。

細節

我有一些帶有字段基因,標簽,注釋的小文檔,描述為

{
  "mappings": {
    "annotations": {
      "properties": {
        "species": {
          "type": "text"
        },
        "gene": {
          "type": "text",
          "fields": {
            "keyword": { 
              "type": "keyword"
            }  
          }
        },
        "tag": {
          "type": "text"
        },
        "annotation": {
          "type": "text"
        }
      }
    }
  }
}

每個基因有很多條目。 也就是說,我有:

Gene  Tag   Annotation
----- ----- ---------------
A1BG  tag1  first gene
A2M   tag1  a-macroglobulin
A2M   tag2  second gene
BRCA1 tag1  breast cancer 1
BRCA1 tag3  important gene

我想查詢這些數據,按基因進行匯總和排序,然后得到如下結果:

Gene   Tags        Annotations
------ ----------- -------------------------------
A1BG   tag1        first gene
A2M    tag1; tag2  a-macroglobulin; second gene
BRCA1  tag1; tag3  breast cancer 1; important gene

谷歌搜索超過一天后,我找不到任何有意義的東西。 Elasticsearch示例主要顯示統計信息(例如計數),還有一些有關連接同一文檔中字段的示例,但是我找不到連接同一字段值的方法。 我試圖使用map以及類似的東西:

{
    "aggs" : {
        "genes_agg" : {
            "terms" : {
                "script" : {
                    "source": "doc['tag'].join('; ')",
                    "lang": "painless"
                }
            }
        }
    }
}

但沒有任何效果。

我認為您找不到任何東西,因為您是從關系數據庫的角度來解決這個問題的。 Elasticsearch的構建就像一個文檔存儲,因此您基本上可以將BRCA1所有標簽,注釋等放入一個文檔中。 我認為您需要重新考慮索引策略,而不是查詢策略。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM