首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用_timestamp从映射中导入ElasticDump

无法使用_timestamp从映射中导入ElasticDump
EN

Stack Overflow用户
提问于 2016-08-24 11:48:23
回答 1查看 191关注 0票数 0

我有一些来自ElasticSearch数据库的JSON文件,我试图用ElasticDump导入它们。

这是映射文件:"mylog.mapping.json“

代码语言:javascript
复制
[
"{\"mylog\":{\"mappings\":{\"search_log\":{\"_timestamp\":{\"enabled\":true,\"store\":true},\"properties\":{\"preArray\":{\"type\":\"long\"},\"preId\":{\"type\":\"string\"},\"filteredSearch\":{\"type\":\"string\"},\"hits\":{\"type\":\"long\"},\"search\":{\"type\":\"string\"},\"searchType\":{\"properties\":{\"name\":{\"type\":\"string\"}}}}}}}}"
]

以及包含数据本身的文件:"mylog.json“

代码语言:javascript
复制
{"_index":"mylog","_type":"search_log","_id":"AU5AcRy7dbXLQfUndnNS","_score":1,"_source":{"searchType":{"name":"TypeSearchOne"},"search":"test","filteredSearch":"test","hits":1470,"preId":"","preArray":[47752,51493,52206,50159,52182,53243,43237,51329,42772,44938,44945,44952,42773,58319,43238,48963,52856,52185,47751,61542,51327,42028,51341,45356,44853,44939,48587,42774,43063,98779,46235,53533,47745,48844,44979,53209,47738,98781,47757,44948,44950,48832,97529,52186,96033,53002,48419,44943,44955,52179]},"fields":{"_timestamp":1435600231611}}
{"_index":"mylog","_type":"search_log","_id":"AU5AcSdcdbXLQfUndnNd","_score":1,"_source":{"searchType":{"name":"TypeSearchTwo"},"search":"squared","filteredSearch":"squared","hits":34,"preId":null,"preArray":null},"fields":{"_timestamp":1435600234333}}
{"_index":"mylog","_type":"search_log","_id":"AU5AcSiZdbXLQfUndnNj","_score":1,"_source":{"searchType":{"name":"TypeSearchOne"},"search":"test","filteredSearch":"test","hits":1354,"preId":"","preArray":[55808,53545,53543,53651,55937,53544,54943,54942,54941]},"fields":{"_timestamp":1435600234649}}

...

{"_index":"mylog","_type":"search_log","_id":"AU5DSVzLdbXLQfUndnPp","_score":1,"_source":{"searchType":{"name":"TypeSearchOne"},"search":"lee","filteredSearch":"lee","hits":39,"preId":"53133","preArray":null},"fields":{"_timestamp":1435647958219}}
{"_index":"mylog","_type":"search_log","_id":"AU5D7M42dbXLQfUndnR9","_score":1,"_source":{"searchType":{"name":"TypeSearchOne"},"search":"leerwww","filteredSearch":"leerwww","hits":39,"preId":"53133","preArray":null},"fields":{"_timestamp":1435658669622}}

在尝试导入ElasticSearch服务器中的数据时,我尝试了以下ElasticDump命令:

代码语言:javascript
复制
elasticdump --input=/home/user/Desktop/LOGDATA/mylog.mapping.json --output=http://localhost:9200/mylog --type=mapping
elasticdump --input=/home/user/Desktop/LOGDATA/mylog.json --output=http://localhost:9200/mylog --type=data

在此之后,数据是可用的,但是,_timestamp字段是无处可见的。如果我检查映射,这就是我获得的:

代码语言:javascript
复制
user@computer:~$ curl -XGET 'localhost:9200/mylog/_mapping'

{
    "mylog":{
        "mappings":{
            "search_log":{
                "properties":{
                    "preArray":{"type":"long"},
                    "preId":{"type":"string"},
                    "filteredSearch":{"type":"string"},
                    "hits":{"type":"long"},
                    "search":{"type":"string"},
                    "searchType":{"properties":{"name":{"type":"string"}}}
                }
            }
        }
    }
}

正如您所看到的,_timestamp字段并不存在,即使它是在映射中指定的。为什么会发生这种情况,如何在不丢失时间戳的情况下导入数据?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-24 18:58:42

从2.0开始, is deprecated and a special type of field known as a meta-field。它在5.0中仍然存在(至少目前是这样),但是您不应该依赖它,您应该期望它被删除。

与其他元字段一样,您不应该能够修改其映射(例如,指定stored: true),也不打算将其设置为文档的一部分。

您应该做的是将字段设置为请求参数:

代码语言:javascript
复制
PUT my_index/my_type/1?timestamp=1435600231611
{"searchType":{"name":"TypeSearchOne"},"search":"test","filteredSearch":"test","hits":1470,"preId":"","preArray":[47752,51493,52206,50159,52182,53243,43237,51329,42772,44938,44945,44952,42773,58319,43238,48963,52856,52185,47751,61542,51327,42028,51341,45356,44853,44939,48587,42774,43063,98779,46235,53533,47745,48844,44979,53209,47738,98781,47757,44948,44950,48832,97529,52186,96033,53002,48419,44943,44955,52179]}

我对ElasticDump还不太了解,不知道是否有可能指示它做“正确的事情”,但实际上这里有一个更好的选择:

修改您的JSON输入以删除_timestamp,并将其替换为一个名为timestamp的普通字段(或您选择的名称)。

代码语言:javascript
复制
"mappings": {
  "my_type": {
    "properties": {
      "timestamp": {
        "type": "date"
      },
      ...
    }
  }
}

请注意,您的ElasticDump输入将_timestamp分离到fields中,而不是从source中分离出来,因此您必须确保执行一个查找/替换操作,将它们正确地连接在一起:

代码语言:javascript
复制
},"fields":{"_timestamp"

应:

代码语言:javascript
复制
,"timestamp"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39122502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档