Elastic Search DSL中扫描和执行功能之间的区别

时间:2018-03-03 21:35:22

标签: elasticsearch python-3.5 elasticsearch-dsl

所以我正在使用plot(y::myfoo)来搜索&通过我的 localhost 上的 index 查询数据。

elasticsearch_dsl

我得到以下结果data.txt,但这并不打印整个数据,它只打印最初的10个数据条目,因为它实际上有1016个条目。我的问题: -

  

1.)扫描和执行功能之间的差异

     

2。)像from pprint import pprint es = elasticsearch.Elasticsearch('http://localhost:9200') s = elasticsearch_dsl.Search(using=es, index='your_index_name') result1 = s.execute() #using the execute method result2 = s.scan() # using the scan method pprint(result1.to_dict()) #check data.txt file for the output which prints only the initial 10 entries of data count1 = 0 for i in result1: print(i.Author) # will print Author name. look data.txt #print(i._index) #gives error count1+=1 print count1 #prints 10 i.e. only initial 10 entries count2 = 0 for i in result2: count2+=1 print count2 #prints 1016 i.e. all the 1016 entries execute函数来打印原始数据,to_dict()方法是否有类似的函数来打印数据?

     

3。)为什么scan只提供最初的10个条目?

     

4.。)另外,如果你看一下 data.txt 文件,当我想得到作者姓名时,它有一个关键字execute() ,所以我可以通过运行循环并执行Author来访问它,但我无法访问print(i.Author)值。_index会出错。如何获得这个价值?

我一直在努力,并且已经做了很多谷歌搜索,并且使用我的代码玩了很多,但我仍然无法知道这是如何工作的。如果有人能提供帮助,我会很高兴。

1 个答案:

答案 0 :(得分:2)

为了最好地理解差异,我建议你看一下elasticsearch本身。 execute(或只是迭代Search个对象)只运行_search API(0)。另一方面,scanscan/scroll API(1)的包装器,它是一个“导出”API,旨在从弹性搜索中卸载所有数据,而不仅仅是热门搜索。

您可以通过_id属性访问_indexmeta等所有元数据,因此:i.meta.idi.meta._index

0 - http://nocf-www.elastic.co/guide/en/elasticsearch/reference/current/search-request-body.html

1 - http://nocf-www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html