Elasticsearch:保留字段名称

这篇具有很好参考价值的文章主要介绍了Elasticsearch:保留字段名称。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Elasticsearch:保留字段名称

作为 Elasticsearch 用户,我们从许多不同的位置收集数据。 我们使用 Logstash、Beats 和其他工具来抓取数据并将它们发送到 Elasticsearch。 有时,我们无法控制数据本身,我们需要管理数据的结构,甚至需要在摄取数据时处理字段名称。

Elasticsearch 有一些保留的字段名称,你不能在文档中使用这些名称。

如果文档具有这些字段之一,则无法为该文档编制索引。 但是,这并不意味着你不能在文档中的任何地方使用这些字段名称。 该限制仅对根节点(root node)有效。 因此,你无法索引以下文档:

PUT twitter/_doc/1
{
  "_id": 1
}

你会得到如下错误:

Elasticsearch:保留字段名称

但是你可以成功地写入如下的文档:

PUT twitter/_doc/1
{
  "user": {
    "_id": 1,
    "name": "liuxg"
  }
}

究其原因,在上面的 _id 它不是在 root node 下的字段。

因此,正如你在上面看到的 _id 字段,你不能在文档中使用以下字段名称作为 root 字段名称:

_id
_field_names
_index
_seq_no
_nested_path
_ignored
_routing
_data_stream_timestamp
_tier
_version
_feature
_source
_primary_term *
_type *

注意:上面用 * 标注的字段对于老版本的 elasticsearch 这个字段也是保留关键字

这意味着如果你有将这些字段名称作为根字段的文档。 你会得到一个错误。 例如,你想使用 Logstash 移动该数据。 你有一个包含如下内容的文件:

{
	"ImdbId": "tt0030629",
	"_id": "tt0030629",
	"name": "Prison Without Bars",
	"year": "1938",
	"certificate": "Approved",
	"runtime": "72 min",
	"genre": ["Crime", " Drama", " Romance"],
	"ratingValue": "6.2",
	"summary_text": "Suzanne, Renee, Nina and Marta all hate being in prison, being slapped and treated badly, and so all the girls are trying to escape. Madame Appel just causes chaos all the time, with her ...                See full summary\u00a0\u00bb",
	"ratingCount": "66"
} 

{
	"ImdbId": "tt0030528",
	"_id": "tt0030528",
	"name": "Orage",
	"year": "1938",
	"certificate": "",
	"runtime": "98 min",
	"genre": ["Drama"],
	"ratingValue": "5.7",
	"summary_text": "Orage is a 1938 French drama film directed by Marc All\u00e9gret. The screenplay was written by Marcel Achard and H.G. Lustig, based on play \"Le venin\" by Henri Bernstein. The films stars ...                See full summary\u00a0\u00bb",
	"ratingCount": "66"
} 

因此,当你尝试使用 Logstash 摄取它时,你将收到以下错误。 即使你在单独索引这些文档时也会遇到上述错误。比如我们使用如下的一个例子:

sample.log

{"_id":1,"timestamp":"2019-09-12T13:43:42Z","paymentType":"Amex","name":"Merrill Duffield","gender":"Female","ip_address":"132.150.218.21","purpose":"Toys","country":"United Arab Emirates","age":33}
{"_id":2,"timestamp":"2019-08-11T17:55:56Z","paymentType":"Visa","name":"Darby Dacks","gender":"Female","ip_address":"77.72.239.47","purpose":"Shoes","country":"Poland","age":55}
{"_id":3,"timestamp":"2019-07-14T04:48:25Z","paymentType":"Visa","name":"Harri Cayette","gender":"Female","ip_address":"227.6.210.146","purpose":"Sports","country":"Canada","age":27}
{"_id":4,"timestamp":"2020-02-29T12:41:59Z","paymentType":"Mastercard","name":"Regan Stockman","gender":"Male","ip_address":"139.224.15.154","purpose":"Home","country":"Indonesia","age":34}
{"_id":5,"timestamp":"2019-08-03T19:37:51Z","paymentType":"Mastercard","name":"Wilhelmina Polle","gender":"Female","ip_address":"252.254.68.68","purpose":"Health","country":"Ukraine","age":51}

logstash_input.conf

input {
  file {
    path => "//Users/liuxg/elastic/logstash-8.6.2/sample.log"
    type    => "applog"
    codec   => "json"
    start_position => "beginning"
    sincedb_path => "/dev/null"
  }
}

output {
   stdout {
      codec => rubydebug
   }

  elasticsearch {
    hosts => ["localhost:9200"]
    index => "json-%{+YYYY.MM.dd}"
  }
}

我们使用如下的命令来启动对数据的采集:

$ pwd
/Users/liuxg/elastic/logstash-8.6.2
$ ls sample.log logstash_input.conf 
logstash_input.conf sample.log
./bin/logstash -f logstash_input.conf 

Elasticsearch:保留字段名称

如你所见,错误与我们上面得到的错误相同。 那么,我们需要做什么? 有一些解决方案可以处理这些类型的数据操作。 你可以在源上修复文档,也可以使用 mutate 过滤器在 Logstash 中管理它们:

logstash_input.conf

input {
  file {
    path => "//Users/liuxg/elastic/logstash-8.6.2/sample.log"
    type    => "applog"
    codec   => "json"
    start_position => "beginning"
    sincedb_path => "/dev/null"
  }
}

filter {
  mutate {
    rename => {"_id" => "id"}
  }
}

output {
   stdout {
      codec => rubydebug
   }

  elasticsearch {
    hosts => ["localhost:9200"]
    index => "json-%{+YYYY.MM.dd}"
  }
}

我们再次运行 Logstash:

./bin/logstash -f logstash_input.conf 

Elasticsearch:保留字段名称

我们可以看到这次数据被成功地写入,并且我们可以在 Kibana 中进行查看:

Elasticsearch:保留字段名称

当您重新运行 logstash 时,您将看到文档将被正确索引。 另一方面,我试图解决摄取管道的问题。 一开始我认为这对我来说可能是一个更好的解决方案。 但有趣的是,我对摄取管道尝试了很多不同的方法,但我找不到解决方案。 这是我尝试使用摄取管道的方法:

POST _ingest/pipeline/_simulate
{
  "pipeline": {
    "processors": [
      {
        "rename": {
          "field": "_id",
          "target_field": "id"
        }
      }
    ]
  },
  "docs": [
    {
      "_index": "myindex",
      "_id": 1,
      "_source": {
        "_id": "2"
      }
    }
  ]
}

我收到以下错误:文章来源地址https://www.toymoban.com/news/detail-412482.html

{
  "error": {
    "root_cause": [
      {
        "type": "illegal_argument_exception",
        "reason": "unexpected metadata [_id:1] in source"
      }
    ],
    "type": "illegal_argument_exception",
    "reason": "unexpected metadata [_id:1] in source"
  },
  "status": 400
}

到了这里,关于Elasticsearch:保留字段名称的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Debezium系列之:把value中指定字段的键值对放到key中,进一步实现key中只保留指定字段的值

    需要把value中的指定的键值对放到key中 例如需要把产品代号cdc_code和产品名称product放到key中#

    2024年02月09日
    浏览(20)
  • dbunit测试2个表的字段的名称和类型是否相同

    需求:要比较不同库的2个表,表名相同,比较这2个表的字段名和类型是否一致(不要求顺序一样),返回不一样的字段名或类型 可以使用以下步骤来比较不同库的2个表的字段名和类型: 连接到两个数据库。 使用DbUnit读取两个表的结构。 比较两个表的字段名和类型。 返回

    2024年02月09日
    浏览(11)
  • 包含引用类型字段的自定义结构体,能作为map的key吗

    在 Go 语言中, map 是一种内置的数据类型,它提供了一种高效的方式来存储和检索数据。 map 是一种无序的键值对集合,其中每个键与一个值相关联。使用 map 数据结构可以快速地根据键找到对应的值,而无需遍历整个集合。 在 Go 语言中, map 是一种内置的数据类型,可以通

    2024年02月07日
    浏览(12)
  • linux usermod命令、groupmod命令使用方法(bad names(不良名称))(GECOS field(GECOS字段))

    usermod 命令用于修改用户账户的属性。它可以用来修改用户的用户名、用户ID、用户组ID、用户家目录、用户登录Shell等属性。例如,要将用户的登录Shell修改为 /bin/bash ,可以使用以下命令: 其中, username 是要修改的用户的用户名。 翻译: 什么是bad names(不良名称)? \\\"bad n

    2024年02月12日
    浏览(12)
  • nohup 输出到指定文件 Linux nohup 实现命令后台运行并输出或记录到指定日志文件 设置日志结果文件名称 重定向到某个文件 标准误 标准错误输出定向 输入报错信息保留

    # yourcommand:启动对象命令。可以跟该命令需要的各种参数。 # 是指在后台运行,但当用户推出(挂起)的时候,命令自动也跟着退出. nohup与结合起来,可以实现不挂断的后台运行。 实现屏幕输出记录到日志文件 # 0 – stdin (standard input),1 – stdout (standard output),2 – stderr (standa

    2024年02月05日
    浏览(9)
  • Django中使用反向关系名称(related_name)解决由“多对多”关系引起的字段名字冲突问题引起的迁移命令报错。

    Django中使用反向关系名称(related_name)解决由“多对多”关系引起的字段名字冲突问题引起的迁移命令报错。

    当在模型中为关系字段添加了 related_name 参数后,您可以使用该参数指定的名称来引用反向关系。下面是一个简单的例子来说明如何引用反向关系。 假设您有以下两个模型: 在上面的例子中, Book 模型有一个外键字段 author ,它关联到 Author 模型。通过添加 related_name=\\\'books\\\' 参

    2024年02月16日
    浏览(11)
  • Elasticsearch 作为 GenAI 缓存层

    Elasticsearch 作为 GenAI 缓存层

    作者:JEFF VESTAL,BAHA AZARMI 探索如何将 Elasticsearch 集成为缓存层,通过降低 token 成本和响应时间来优化生成式 AI 性能,这已通过实际测试和实际实施进行了证明。 随着生成式人工智能 (GenAI) 不断革新从客户服务到数据分析等各个领域,它也面临着一系列挑战,包括计算成本

    2024年02月03日
    浏览(9)
  • Elasticsearch:使用 ingest pipeline 来管理索引名称

    Elasticsearch:使用 ingest pipeline 来管理索引名称

    在我之前的文章 “Elasticsearch:使用 pipelines 路由文档到想要的 Elasticsearch 索引中去” 我详述了如何使用已有的 date_index_name 处理器来把文档归类到所需要的和文档日期相关的的索引中去。比如,我们想把 2023 年 4 月的所有文档写入到 my-index-2023-04-01 这个索引名称中去。这个

    2024年02月08日
    浏览(29)
  • 如何使用 Elasticsearch 作为向量数据库

    如何使用 Elasticsearch 作为向量数据库

    在今天的文章中,我们将很快地通过 Docker 来快速地设置 Elasticsearch 及 Kibana,并设置 Elasticsearch 为向量搜索。 在上面,我们指定了 elasic 超级用户的密码为 password。这在下面将要使用到。 验证容器是否已启动并正在运行: 从上面我们可以看到 Elasticsarch 及 Kibana 已经完全运行

    2024年04月17日
    浏览(52)
  • elasticsearch 更新字段或删除字段

    elasticsearch 更新字段或删除字段

    遇到问题: 项目新需求需要添加字段,中途确认好字段类型并准备开发,定义为text类型并更新到es中,突然产品又有需求调整,需要将类型设置为nested类型,查阅了好多资料,发现修改es字段数据类型和删除字段都没有详细介绍,请教了一下chartGPT和同事整理了一下自己的解决

    2024年02月13日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包