亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

文本或整數的 ElasticSearch 聚合

文本或整數的 ElasticSearch 聚合

C#
HUH函數 2022-06-18 16:47:35
我們有一個過程,我們的 Web 服務在 ElasticSearch(C#,使用 NEST)中創建日志記錄。ES 索引名稱包括月份和年份。聚合程序(C#,不使用 NEST)從各種日志中提取近乎實時的信息。它由日期直方圖、一些項(主機、ip 等)和一些整數字段的總和組成。它發出類似這樣的請求:{    "size":0,    "query": {        "range":{"date":{"gt":"2018-10-01T00:00:00","lte":"2018-10-01T01:00:00"}}    },    "aggs": {        "myBuckets": {            "composite": {                "size":100,                "sources": [                    {"host":{"terms":{"field":"host.keyword","missing":""}}},                    {"ipAddress":{"terms":{"field":"ipAddress.keyword","missing":""}}},                    {"date":{"date_histogram":{"field":"date","interval":"1h"}}}                ]            },            "aggregations": {                "records":{"sum":{"field":"records","missing":0}}            }        }    }}問題在于這些整數字段,因為偶爾流氓/錯誤 Web 服務會使用字符串而不是整數。這會導致 ES 更改字段的索引映射(從整數到字符串),并破壞聚合器。通過重新索引來修復索引不是一種選擇,如果可能的話,我們更愿意即時處理這個問題。我目前的計劃是讀取索引的映射并將求和聚合切換為類似于以下的無痛腳本:doc['badField.keyword'].value!=null ? Integer.parseInt(doc['badField.keyword'].value) : 0有沒有更好的方法來處理這種情況?如果沒有,是否有更強大的整數轉換腳本方法?
查看完整描述

1 回答

?
幕布斯6054654

TA貢獻1876條經驗 獲得超7個贊

... ES 改變索引對字段的映射


ES 永遠不會改變一個字段的映射,一旦它被創建。發生這種情況的唯一方法是,如果您發送的第一條記錄具有字符串值而不是整數值。


您可以通過在索引第一條記錄之前使用創建索引模板來輕松克服這個問題:


PUT _template/my-template

{

  "index_patterns": ["my-index*"],

  "mappings": {

    "_doc": {

      "properties": {

        "my_integer_field": {

          "type": "integer"           <---- this will always be honored

          "ignore_malformed": true    <---- ignore if the value really isn't an integer

        }

      }

    }

  }

}


查看完整回答
反對 回復 2022-06-18
  • 1 回答
  • 0 關注
  • 138 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號