国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Elasticsearch:ignore_malformed,映射異常的解藥

這篇具有很好參考價值的文章主要介紹了Elasticsearch:ignore_malformed,映射異常的解藥。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

ignore_malformed,Elasticsearch,Elastic,elasticsearch,大數(shù)據(jù),搜索引擎,全文檢索,運(yùn)維

我們知道在文檔攝入到 Elasticsearch 時,如果文檔的字段在 mapping 中已經(jīng)有定義,而當(dāng)前的文檔的字段的類型和之前的類型是不一樣的情況下,那么我們該如何處理呢?通常由如下的幾種方法:

  • 使用?coerce?屬性。在這種情況下,即便不同類型的數(shù)據(jù)被寫入到相應(yīng)的字段,在能夠相互轉(zhuǎn)換的情況下,它的寫入也可以是成功的。請詳細(xì)閱讀文章 “Elasticsearch:Elasticsearch 中的數(shù)據(jù)強(qiáng)制匹配” 及 “Elasticsearch:如何將浮點(diǎn)值存儲到整型字段中”。
  • 通過 ingest pipeline 或者 Logstash 進(jìn)行數(shù)據(jù)轉(zhuǎn)換再寫入到 Elasticsearch。

上面的方法只適用于在能夠轉(zhuǎn)換的條件下才可以實(shí)現(xiàn),比如 “1” => 1 的轉(zhuǎn)換。但是,在有些情況下,我們的這種轉(zhuǎn)換是根本不可行的,比如 "one" => 1。首先這種數(shù)據(jù)的類型是根本不一樣,而且即便強(qiáng)制轉(zhuǎn)換,也會失敗。

那么出現(xiàn)這種情況,一種是直接丟棄該文檔,這會造成文檔的丟失,即使是一個字段的類型不匹配。那么我們是否有其它的方式呢來處理這個文檔呢?比如丟失這個不符合的字段,而攝入其它的字段。

忽略不符合索引映射的字段,并避免在使用 Elasticsearch 攝取期間丟棄文檔。一個幾乎不為人知的名為 ignore_malformed 的設(shè)置如何在因?yàn)閱蝹€字段格式錯誤而完全刪除文檔或忽略該字段并無論如何攝取文檔之間產(chǎn)生差異。

ignore_malformed

有時你對收到的數(shù)據(jù)沒有太多控制權(quán)。 一個用戶可以發(fā)送一個 login 字段,它是一個 date,另一個用戶可以發(fā)送一個 login 字段,它是一個電子郵件地址。

嘗試將錯誤的數(shù)據(jù)類型索引到字段中會默認(rèn)引發(fā)異常,并拒絕整個文檔。 ignore_malformed 參數(shù),如果設(shè)置為 true,則允許忽略異常。 格式錯誤的字段沒有被索引,但文檔中的其他字段被正常處理。

在本文中,我將解釋設(shè)置 ignore_malformed 如何影響 100% 的丟棄率和 100% 的成功率(即使只是忽略一些格式錯誤的字段)。

映射是如何工作的

我喜歡將 Elasticsearch 視為一個基于文檔的 NoSQL 數(shù)據(jù)庫,其中不需要預(yù)先定義索引的模式。 Elasticsearch 將從第一個文檔或包含新字段的任何后續(xù)文檔推斷 schema。

或者,你可以預(yù)先提供一個 schema(在 Elasticsearch 術(shù)語中稱為映射 mapping),并且你的所有文檔都需要遵循該 schema。

實(shí)際上,情況并非非黑即白。 你還可以為每個文檔提供僅涵蓋部分字段(可能是最常見的)的部分模式,并讓 Elasticsearch 找出更多動態(tài)字段的 schema。

當(dāng)數(shù)據(jù)格式錯誤時會發(fā)生什么?

無論你是預(yù)先指定映射還是 Elasticsearch 自動推斷映射。 如果文檔只顯示一個與索引映射不匹配的字段,Elasticsearch 將刪除整個文檔并在客戶端日志中返回警告。

如果客戶不查看這些日志而錯過了警告,就會出現(xiàn)大問題。 他們可能永遠(yuǎn)不會發(fā)現(xiàn)哪里出了問題,或者更糟的是,如果所有后續(xù)文檔的格式都錯誤,Elasticsearch 甚至可能會完全停止攝取數(shù)據(jù)。

上述情況聽起來非常災(zāi)難性,但完全有可能發(fā)生,尤其是在你無法完全控制數(shù)據(jù)質(zhì)量的情況下。 想想用戶生成的文檔。

Elasticsearch 中可能有一個非常未知的設(shè)置可以準(zhǔn)確解決上述問題。 這個字段從 Elasticsearch 2.0 開始就有了。 我們在這里談?wù)摴爬系臍v史,因?yàn)樵谧珜懕疚臅r最新版本是 8.8。

示例用例

為了更方便地與 Elasticsearch 交互,我將在這里使用 Kibana(Elasticsearch 的前端工具)和 Dev Tools?控制臺。

以下示例摘自 Elasticsearch 官方文檔。

我在這里通過提供一些關(guān)于幕后發(fā)生的事情的更多細(xì)節(jié)來擴(kuò)展這個例子。

首先,我們要定義 2 個字段,它們都是整數(shù)類型,但只有一個字段定義了 ignore_malformed 。

PUT my-index-000001
{
  "mappings": {
    "properties": {
      "number_one": {
        "type": "integer",
        "ignore_malformed": true
      },
      "number_two": {
        "type": "integer"
      }
    }
  }
}

如果你嘗試使用以下命令獲取生成的映射:

GET my-index-000001/_mapping

你講得到如下的結(jié)果:

{
  "my-index-000001": {
    "mappings": {
      "properties": {
        "number_one": {
          "type": "integer",
          "ignore_malformed": true
        },
        "number_two": {
          "type": "integer"
        }
      }
    }
  }
}

然后我們提取兩個示例文檔:

PUT my-index-000001/_doc/1
{
  "text":       "Some text value",
  "number_one": "foo" 
}

PUT my-index-000001/_doc/2
{
  "text":       "Some text value",
  "number_two": "foo" 
}

文檔 1 被正確攝取,而文檔 2 反而返回以下錯誤消息。

{
  "error": {
    "root_cause": [
      {
        "type": "document_parsing_exception",
        "reason": "[3:17] failed to parse field [number_two] of type [integer] in document with id '2'. Preview of field's value: 'foo'"
      }
    ],
    "type": "document_parsing_exception",
    "reason": "[3:17] failed to parse field [number_two] of type [integer] in document with id '2'. Preview of field's value: 'foo'",
    "caused_by": {
      "type": "number_format_exception",
      "reason": "For input string: \"foo\""
    }
  },
  "status": 400
}

如果你隨后使用以下查詢搜索相同的索引:

GET my-index-000001/_search
{
  "fields": [
    "*"
  ],
  "_source": true
}

你會看到只有第一個文檔(id=1)被正確攝取。

{
  "took": 659,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 1,
      "relation": "eq"
    },
    "max_score": 1,
    "hits": [
      {
        "_index": "my-index-000001",
        "_id": "1",
        "_score": 1,
        "_ignored": [
          "number_one"
        ],
        "_source": {
          "text": "Some text value",
          "number_one": "foo"
        },
        "fields": {
          "text.keyword": [
            "Some text value"
          ],
          "text": [
            "Some text value"
          ]
        },
        "ignored_field_values": {
          "number_one": [
            "foo"
          ]
        }
      }
    ]
  }
}

從上面的 JSON 響應(yīng)中,你可以注意到幾件事:

  • 現(xiàn)在有一個 _ignored 類型的字段,其中包含在攝取此文檔時被忽略的所有字段的列表。
  • 有一個字段 ignored_field_values 帶有忽略字段及其值的字典。
  • 字段 source 包含未修改的原始文檔。 如果你想稍后修復(fù)映射問題,這將特別有用。

結(jié)論

你可以從今天開始在你的索引上使用 ignore_malformed ,只需添加到你的索引設(shè)置,創(chuàng)建映射時添加到單個字段,或者添加到索引模板以使具有特定索引模式的所有索引成為默認(rèn)選項。 為了簡潔起見,我不會在這里展示如何將此設(shè)置用于索引、索引模板或組件模板。 請參閱官方文檔或繼續(xù)關(guān)注有關(guān)該主題的更多文章。

Elastic 目前正在努力使此設(shè)置成為 Elasticsearch 8.9 的默認(rèn)設(shè)置。文章來源地址http://www.zghlxwxcb.cn/news/detail-735429.html

到了這里,關(guān)于Elasticsearch:ignore_malformed,映射異常的解藥的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Elasticsearch的索引和映射:動態(tài)映射

    Elasticsearch是一個基于分布式搜索和分析引擎,可以提供實(shí)時的、可擴(kuò)展的、高性能的搜索功能。它是一個基于Lucene的搜索引擎,具有高度可擴(kuò)展性和高性能。Elasticsearch支持多種數(shù)據(jù)類型,如文本、數(shù)字、日期等,并提供了豐富的查詢功能。 在Elasticsearch中,數(shù)據(jù)是通過索引和

    2024年02月20日
    瀏覽(17)
  • OOD 使用基于提示的特征映射生成用于視頻異常檢測

    OOD 使用基于提示的特征映射生成用于視頻異常檢測

    paper link 本文提出了使用 提示引導(dǎo)特征映射 的生成式視頻異常檢測框架,作者來自中山大學(xué),文章發(fā)表在cvpr2023 作者首先分析了現(xiàn)有方法并指出當(dāng)前面臨的兩個問題 大多數(shù)視頻異常檢測方法通過在訓(xùn)練階段學(xué)習(xí)正常事件的分布,并在測試階段檢測分布外樣本來決問題。顯著的

    2024年02月09日
    瀏覽(33)
  • Elasticsearch(2)——映射關(guān)系

    Elasticsearch(2)——映射關(guān)系

    1 什么是映射 映射(mapping)就像數(shù)據(jù)庫中的 Schema ,描述了文檔可能具有的字段或?qū)傩?、每個字段的 數(shù)據(jù)類型,比如 Text,Keyword,Integer 或 Date ,以及 Lucene 是如何索引和存儲這些字 段的。 Elasticsearch 支持如下簡單字段類型: (1) 字符串: text,keyword (2)整數(shù):byte,sho

    2024年02月12日
    瀏覽(17)
  • 14. Elasticsearch動態(tài)映射-1

    14. Elasticsearch動態(tài)映射-1

    14.1 映射 類型和字段的信息存儲(包含)在映射(mapping)中 Elasticsearch支持以下簡單字段類型: 14.2 映射規(guī)則 Elasticsearch將使用動態(tài)映射猜測字段類型,這類型來自于JSON的基本數(shù)據(jù)類型,使用以下規(guī)則: 查看映射 14.3 動態(tài)映射 Elasticsearch最重要的功能之一是不必首先創(chuàng)建ind

    2023年04月08日
    瀏覽(76)
  • Elasticsearch刪除映射類型

    官方解釋:https://www.elastic.co/guide/en/elasticsearch/reference/6.0/removal-of-types.html 在elasticsearch6.0.0或更高的版本中創(chuàng)建索引僅能包含單個映射類型。在具有多種映射類型的5.x版本中創(chuàng)建的索引將繼續(xù)像以前一樣在elasticsearch6.x中運(yùn)行。類型將在elasticsearch7.0.0中的API中棄用,并在8.0.0中完

    2024年02月06日
    瀏覽(14)
  • Elasticsearch映射與字段類型

    Elasticsearch映射與字段類型 Elasticsearch是一個分布式、實(shí)時的搜索和分析引擎,基于Lucene庫構(gòu)建。它可以快速、高效地索引、搜索和分析大量數(shù)據(jù)。在Elasticsearch中,數(shù)據(jù)以文檔的形式存儲,每個文檔都有一個唯一的ID。文檔可以存儲在一個索引中,索引可以存儲在一個集群中。

    2024年02月22日
    瀏覽(46)
  • Elasticsearch的映射操作

    Elasticsearch的映射操作

    本文來記錄下Elasticsearch的映射操作 Elasticsearch與mysql數(shù)據(jù)庫對比 映射的概述 有了索引庫,等于有了數(shù)據(jù)庫中的 database。 索引庫(index)中的映射,類似于數(shù)據(jù)庫(database)中的表結(jié)構(gòu)(table)。 創(chuàng)建數(shù)據(jù)庫表需要設(shè)置字段名稱,類型,長度,約束等;索引庫也一樣,需要知道這個類型

    2024年01月21日
    瀏覽(11)
  • Elasticsearch 映射Mappings (三)

    本文主要記錄映射Mappings的作用、類型、ES常用數(shù)據(jù)類型、常見參數(shù)、重要的數(shù)據(jù)類型、映射配置、映射模板。 靜態(tài)參數(shù)使不可修改的,所以mappings里的配置需要謹(jǐn)慎行事 mapping類似Mysql中的表結(jié)構(gòu),在Maping里包含了一些屬性,比如字段名稱、類型、字段使用的分詞器、是否評

    2024年02月16日
    瀏覽(18)
  • ElasticSearch 基礎(chǔ)(五)之 映射

    本文主要內(nèi)容轉(zhuǎn)載于:ES Doc - mapping。 映射(Mapping) 是定義文檔及其包含的字段如何存儲和索引的過程。 每個文檔都是字段的集合,每個字段都有自己的數(shù)據(jù)類型。映射數(shù)據(jù)時,創(chuàng)建映射定義,其中包含與文檔相關(guān)的字段列表,決定字段使用什么分詞器解析,是否有子字段

    2024年02月01日
    瀏覽(17)
  • Elasticsearch映射操作(八)

    ????????在使用數(shù)據(jù)之前,需要構(gòu)建數(shù)據(jù)的組織結(jié)構(gòu)。這種組織結(jié)構(gòu)在關(guān)系型數(shù)據(jù)庫中叫作表結(jié)構(gòu),在ES中叫作映射。 ????????作為無模式搜索引擎,ES可以在數(shù)據(jù)寫入時猜測數(shù)據(jù)類型,從而自動創(chuàng)建映射。但有時ES創(chuàng)建的映射中的數(shù)據(jù)類型和目標(biāo)類型可能不一致。當(dāng)需

    2023年04月09日
    瀏覽(13)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包