簡體   English   中英

如何有效地僅獲取文檔的一個字段以進行彈性搜索

[英]How to efficiently get only one field of the documents for elastic search

我是Elasticsearch的新手,並且遇到了一些技術困難。 目前,我有按小時索引存儲的文檔,它們是時間序列數據。 我要弄清楚的是如何僅有效地提取key字段值,該值定義為"key": { "type": "long" } 我最初嘗試的是朴素的方法,該方法可滾動瀏覽所有索引並提取字段,但顯然並不能很快完成,每個小時的索引大約有1000萬個文檔,並且滾動3個索引已經花費了很長時間。

然后,我進入術語聚合 ,試圖使key段成為聚合術語:

  "aggregations": {
    "test_group": {
      "terms": {
        "field": "key",
        "size": 100000
      }
    }
  }

這給了我更好的性能,但是當用戶嘗試搜索歷史記錄時,它還不足以作為實時系統,因為key是一個高基數字段。 一些粗略的基准測試告訴我:

size = 50k,  indices = 4, time range = 3hrs: 7.1s
size = 100k, indices = 4, time range = 3hrs: 7.669s
size = 1m,   indices = 4, time range = 2hrs: 12.669s
size = 1m,   indices = 4, time range = 3hrs: 14.669s

這還沒有結束,因為我正在使用彈性搜索go庫來解析輸出並進行一些處理,這給整個響應增加了不平凡的時間。

我的問題是:這已經是最好的ES可以做到的嗎? 還有其他我想念的方式嗎? 我目前在ES 5.6和3個群集節點上,全部使用Amazon i3-4xl實例。 謝謝。

如果我正確理解了您的問題,那么您正在嘗試從文檔中檢索一個稱為“鍵”的特定字段,並且我認為您正在返回的文檔中還有其他字段是您不關心的?

如果是這樣,請嘗試以下操作:

GET /_search
{
    "_source": {
        "includes": ["key"]
    }
}

我不確定您要實現的目標,但是從文檔中檢索一個字段通常需要將store參數設置為true,因此不需要從_source字段解析此字段。

查看文件: https : //www.elastic.co/guide/zh-CN/elasticsearch/reference/current/number.html#number-params

暫無
暫無

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

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