2016-03-12 62 views
0

我正在向elasticsearch发送查询,并且在文档中以未知的字段顺序响应。 我该如何解决elsasticsearch在文档中返回字段的顺序? 我的意思是,我要送这个查询:elasticsearch:在返回的文档中定义字段的顺序

{ 
"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“相同的顺序?

感谢您的帮助。

回答

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" 
    } 
} 
+0

瓦尔嗨。谢谢您的回答。我明白你的建议,但我不想仅为订购字段安装logstash。我不能相信有没有一种原生的方式来与elasticsearch做到这一点。有人有另一种解决方案来解决这个问题?无论如何,谢谢瓦尔,祝你有美好的一天:) –

+0

它既不是一个ES问题,也不是一个缺点,它只是JSON规范的要求;) – Val

+0

谢谢瓦尔:) –

相关问题