elasticsearch:在返回的doc中定义字段的顺序

时间:2016-03-12 13:19:05

标签: elasticsearch

我正在向elasticsearch发送查询,并且在文档中以未知的字段顺序进行响应。 我如何修复elsasticsearch返回文档内的字段的顺序? 我的意思是,我发送此查询:

{
"index": "my_index",
"_source":{
          "includes" : ["field1","field2","field3","field14"]
  },
"size": X,
"body": {
    "query": { 
        // stuff    
       }
    }
}

当它响应时,它给了我一些不正常的东西。 我最后希望将其转换为csv,并希望修复csv头文件。 有什么可以做的,我可以得到类似的东西 doc1:{“field1”,“field2”,“field3”,“field14”} doc2:{“field1”,“field2”,“field3”,“field14”} ... 和我的“_source”一样的顺序?

谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

Elasticsearch中的文档是JSON哈希/地图,根据定义maps are unordered

解决此问题的一个解决方案是使用Logstash来使用elasticsearch input从ES中提取文档,然后使用csv output以CSV格式输出文档。这样,您可以保证CSV文件中的字段与指定的顺序完全相同。另一个好处是您不必编写自己的样板代码来从ES中提取并接收到CSV,Logstash会免费为您完成。

Logstash配置如下所示:

input {
  elasticsearch {
    hosts => "localhost"
    query => '{ "query": { "match_all": {} } }'
    size => 100
    index => "my_index"
  }
}
filter {}
output {
    csv {
        fields => ["field1","field2","field3","field14"]
        path => "/path/to/file.csv"
    }
}