У меня есть простой SQL-запрос в Elasticsearch, который, как я знаю, возвращает менее 100 строк результатов.Как я могу получить все эти результаты сразу (т.е. без использования прокрутки)?Я пробовал предложение limit n
, но оно работает, когда n
меньше или равно 10, но не работает, когда n
больше 10.
Код Python для вызова API-интерфейса Elasticsearch SQLкак показано ниже.
import requests
import json
url = 'http://10.204.61.127:9200/_xpack/sql'
headers = {
'Content-Type': 'application/json',
}
query = {
'query': '''
select
date_start,
sum(spend) as spend
from
some_index
where
campaign_id = 790
or
campaign_id = 490
group by
date_start
'''
}
response = requests.post(url, headers=headers, data=json.dumps(query))
Приведенный выше запрос возвращает идентификатор курсора.Я попытался ввести идентификатор курсора в тот же API-интерфейс SQL, но он не дал мне большего результата.
Я также попытался преобразовать вышеуказанный SQL-запрос в собственный запрос Elasticsearch с помощью API-интерфейса SQL translate и обернул его вследующий код Python, но он тоже не работает.Я все еще получил только 10 строк результатов.
import requests
import json
url = 'http://10.204.61.127:9200/some_index/some_doc/_search'
headers = {
'Content-Type': 'application/json',
}
query = {
"size": 0,
"query": {
"bool": {
"should": [
{
"term": {
"campaign_id.keyword": {
"value": 790,
"boost": 1.0
}
}
},
{
"term": {
"campaign_id.keyword": {
"value": 490,
"boost": 1.0
}
}
}
],
"adjust_pure_negative": True,
"boost": 1.0
}
},
"_source": False,
"stored_fields": "_none_",
"aggregations": {
"groupby": {
"composite": {
"size": 1000,
"sources": [
{
"2735": {
"terms": {
"field": "date_start",
"missing_bucket": False,
"order": "asc"
}
}
}
]
},
"aggregations": {
"2768": {
"sum": {
"field": "spend"
}
}
}
}
}
}
response = requests.post(url, headers=headers, data=json.dumps(query)).json()