elasticsearch 无法将非对象Map与机器学习(beta)模块中的对象Map错误合并

tzdcorbm  于 12个月前  发布在  ElasticSearch
关注(0)|答案(2)|浏览(115)

我正在试用x pack中的新机器学习模块。我试图及时识别HTTP访问日志中的罕见响应代码。我的日志存储在elasticsearch中,如下所示:

{
  "_index": "logstash-2017.05.18",
  "_type": "Accesslog",
  "_id": "AVxvVfFGdMmRr-0X-J5P",
  "_version": 1,
  "_score": null,
  "_source": {
    "request": "/web/Q123/images/buttons/asdf.gif",
    "server": "91",
    "auth": "-",
    "ident": "-",
    "verb": "GET",
    "type": "Accesslog",
    "path": "/path/to/log",
    "@timestamp": "2017-05-18T10:20:00.000Z",
    "response": "304",
    "clientip": "1.1.1.1",
    "@version": "1",
    "host": "ip-10-10-10-10",
    "httpversion": "1.1",
    "timestamp": "18/May/2017:10:20:00 +0530"
  },
  "fields": {
    "@timestamp": [
      1495102800000
    ]
  }

我添加了一个检测器,其中我选择函数为'rare',by_field_name'为' response '。但是当我保存作业时,我得到以下错误:

Save failed: [illegal_argument_exception] Can't merge a non object mapping [response] with an object mapping [response]

请帮帮我

whlutmcx

whlutmcx1#

错误消息表示您正在尝试更改现有Map。但是,这在Elasticsearch中是不可能的。一旦创建了Map,就不能更改它。
As explained by Shay Banon himself
你不能改变现有的Map类型,你需要用正确的Map创建一个新的索引,然后重新索引数据。
因此必须创建一个新索引来创建此Map。根据情况,你要么

  • 创建附加索引,或
  • 删除当前索引并从头开始重新创建。

当然,在后一种情况下,您将丢失索引中的所有数据,因此请做好相应的准备。

b5lpy0ml

b5lpy0ml2#

我遇到了同样的问题,并找到了解决办法。我的问题是动态JSON中的模型已经改变了,对于一个索引上没有数据的字段,我得到了这样的解决方案
1.创建一个新的索引(PUT /new-index)
1.放入新的Map(PUT /new-index/_mapping)
1.将数据从旧索引重定基到新索引(POST _reindex)
1.删除旧索引(目录/索引)
1.使用新Map创建旧索引(PUT /index,PUT /index/_mapping)
1.从新索引到旧索引重定数据基(POST _reindex)

相关问题