извлекать ограниченные данные из индексов поиска Elastic с использованием соответствия всем Python запроса - PullRequest
1 голос
/ 06 июня 2019

Я пишу программу на Python для получения данных из индексов упругого поиска. Я хочу получить данные, основанные на запросе на совпадение, который я указал до 25. Я хочу первые 25 данных. Данные в моем индексе - 10842. Но он извлекает все данные из индекса упругого поиска. Отсюда я проверил решение matchall для es , но оно мне не помогло. Помогите мне с некоторыми решениями

Вот код:

from elasticsearch import Elasticsearch
import elasticsearch.helpers

count = 0
host = 'localhost'
ind = 'apps'
doc_typ = "change_apps"
limit_count = 25

def elasticsearch_import(host,ind,doc_typ,count,limit_count,port=9200,query={},single_line=False,single_line_label="message"):
    data_count=count+limit_count
    print("Data to be get from Elastic Search: ",data_count)
    es = Elasticsearch()

    results = elasticsearch.helpers.scan(es,
    index=ind,
    doc_type=doc_typ,
    preserve_order=True,
    query={"from":count,"size":data_count,"query": {"bool": {"must": [{"match_all": {}}],"must_not": [],"should": [] }},})
    res=[]
    for i in results:
        res.append(i)
    #print("res",res)
    print("Data got from Elastic Search",len(res))

elasticsearch_import(host,ind,doc_typ,count,limit_count)

Вывод, который я получил:

Data to be get from Elastic Search:  25
Data got from Elastic Search 10842

Требуемый вывод:

Data to be get from Elastic Search:  25
Data got from Elastic Search 25

1 Ответ

1 голос
/ 06 июня 2019

Это то, что делает метод scan ... он использует метод scroll под капотом, если вы посмотрите на документацию API , size будет на самом деле означает batch size.

size – size (per shard) of the batch send at each iteration.

Если вы просто хотите получить результат с размером, достаточно search, в этом случае size - это размер результата, а значением по умолчанию является 10.

...