#python #elasticsearch
#python #elasticsearch
Вопрос:
Я использую вложенный внутри запроса elasticsearch вместе с сортировкой. когда я выполняю запрос без сортировки, он работает, но когда я включаю сортировку, он выдает сообщения [bool] неверно сформированный запрос, ожидаемый [END_OBJECT], но найденный [FIELD_NAME] . Я создаю этот запрос на python. Заранее спасибо.
query = {
'bool': {
'should': [
{'nested': {
'path': 'profile.summay',
'query': {
'query_string': {
'query': 'machine learning',
'fields': ['profile.summay.desc'],
'default_operator': "AND"
}
}
}},
{'nested': {
'path': 'internal.summary',
'query': {
'query_string': {
'query': 'machine learning',
'fields': ['internal.summary.desc'],
'default_operator': "AND"
}
}
}}
]
},
"sort": [
{
'profile.summary.date':{
'order' : 'asc',
"nested": { "path": "profile.summary" }
}
}
]
}
from elasticsearch import Elasticsearch
es_client = Elasticsearch(['some aws url'])
response = es_client.search(index=index_name, query=query)
Ответ №1:
TLDR;
Вы неправильно sort
разместили.
{
"query": {
"bool": {
"should": [
{
"nested": {
"path": "profile.summay",
"query": {
"query_string": {
"query": "machine learning",
"fields": ["profile.summay.desc"],
"default_operator": "AND"
}
}
}
},
{
"nested": {
"path": "internal.summary",
"query": {
"query_string": {
"query": "machine learning",
"fields": ["internal.summary.desc"],
"default_operator": "AND"
}
}
}
}
]
}
},
"sort": [
{
"profile.summary.date": {
"order": "asc",
"nested": { "path": "profile.summary" }
}
}
]
}
Согласно документации [doc], sort
ключ должен находиться на той же глубине, query
что и ключ. Не на уровень глубже.
Ваш код должен перейти от
{
"query": {
... query,
"sort": [
... sort
]
}
}
Для:
{
"query": {
... query
},
"sort": [
... sort
]
}
Комментарии:
1. Я тоже пробовал этот способ, но получаю ошибку «Ошибка запроса (400, ‘parsing_exception’, ‘нет [запроса], зарегистрированного для [запроса]’)». Между тем, я использую python для построения запроса и передачи того же, что я опубликовал в вопросе.
2. Аааа, я лучше понимаю, почему формат вашего запроса кажется неправильным. (1) опровергните мою правку по вашему вопросу, (2) посмотрите документацию функции python, которую вы вызываете, они должны быть другим параметром для сортировки no?
3. Какую библиотеку вы используете? может быть, опубликовать фрагмент вашего кода
4. Я отредактировал вопрос, в котором он содержит информацию о библиотеке и фрагмент кода