在Elasticsearch中查询2个索引?

时间:2019-02-25 19:54:01

标签: python elasticsearch

我想知道是否有可能在Elasticsearch中查询2个索引,并将结果混合在一起显示在1个表中。例如:

指标:

food-american-burger
food-italian-pizza
food-japanese-ramen
food-mexican-burritos

#query here for burger and pizza, and display the results in a csv file
#i.e. if there was a timestamp field, display results starting from the most recent

我知道您可以查询food- *,但它会给出2个我不想要的索引。

我查找了Elasticsearch DSL的multisearch模块,但文档仅显示了1个索引查询的实例:

ms = MultiSearch(index='blogs')

ms = ms.add(Search().filter('term', tags='python'))
ms = ms.add(Search().filter('term', tags='elasticsearch'))

第1部分:

是否可以将其用于多个索引?最终,我想查询x个索引并以一种人类可读的格式(csv,json等)显示所有数据,但是我不确定如何仅对索引I执行单个查询想要。

我目前具有执行查询和写出数据的功能,但是每个数据文件仅包含我查询的索引。我想将所有数据显示在一个文件中。

第2部分:

数据存储在字典中,然后将其写入csv。当前正在按时间戳进行排序。代码:

sorted_rows = sorted(rows,key=lambda x: x['@timestamp'], reverse=True)
for row in sorted_rows:
          writer.writerow(row.values())

在写入csv时,时间戳记字段不是第一列。我将字段存储在字典中,并为每次Elasticsearch命中更新该字典,然后将其写入csv。有没有办法将时间戳字段移到第一列?

谢谢!

1 个答案:

答案 0 :(得分:2)

根据Elasticsearch Docs,您可以使用{{1}查询单个索引(例如food-american-burger),多个逗号分隔的索引(例如food-american-burger,food-italian-pizza)或所有索引}关键字。

我还没有亲自使用过Python客户端,但这是一个API约定,应该适用于任何正式的Elasticsearch客户端。


对于第2部分,您可能应该提交一个单独的问题,以使每个问题都集中在一个主题上,因为这两个主题并不直接相关。