Stack Overflow на русском Asked by Za Ars on December 28, 2021
Доброе время суток
Использую django и elasticsearch.
При фильтрации, возникает ошибка
RequestError(400, 'parsing_exception', "[range] query doesn't support multiple fields, found [votes_all] and [votes_ru]")
Происходит это из-за условия
es_cond = (
ES_Q(
'range', **{
field_tmpl % ALL: {'gte': val},
}) & ES_Q(
'range', **{
field_tmpl % self.country_code: {
'lt': settings.GAME_MIN_VOTES_FOR_COUNTRY_RATE_DISPLAY
}
})
) | ES_Q(
'range', **{
field_tmpl % self.country_code: {
'gte': max(val, settings.GAME_MIN_VOTES_FOR_COUNTRY_RATE_DISPLAY)
}
}
)
где field_tmpl = 'votes_%s'
, All = 'all'
, self.country_code = 'ru'
Не могу разобраться, почему возникает ошибка, так как в аналогичном хапросе по другому полю все хорошо
UPDATE
Обновил (упростил) до
ES_Q(
'range', **{
field_tmpl % ALL: {'gte': val},
}
) | ES_Q(
'range', **{
field_tmpl % self.country_code: {
'gte': max(
val, settings.GAME_MIN_VOTES_FOR_COUNTRY_RATE_DISPLAY
)
}
}
)
В отладке
es_cond.to_dict()
{'bool': {'should': [{'range': {'votes_all': {'gte': 0}}}, {'range': {'votes_ru': {'gte': 2}}}]}}
Но в выводе нет результатов.
Причем в БД имеются 2800+ записей по этому условию
Проблема была в другом блоке, везде где было Q('range', **{'f1' : {'gte': v1}, 'f2' : {'gte': v2}} заменил на Q('range', **{'f1' ....}) | Q('range', {'f2' ....}) и это исправило ошибку.
Исчезновение данных решено через search_index --rebuild
Answered by Za Ars on December 28, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP