Как сделать запрос по неанализированным полям?

У меня есть несколько вещей в моем классе asticsearch_dsl, которые я хочу запросить точное совпадение:

class Profile(DocType):
    name = String(fields={'raw': String(index='not_analyzed')})

Хотя это работает, мне всегда нужно добавить .raw на запрос и не может запросить name именно так:

# Matches "foo" and "foo-1"
Profile.search().filter('term', name='foo'})
# Matches nothing
Profile.search().filter('term', name='foo-1'})
# Matches what i want (only "foo-1")
Profile.search().filter('term', **{'name.raw': 'foo-1'})

Это немного неправильно, так как я могу просто использовать name и не rawпотому что так должно быть.

Какой правильный путь?

1 ответ

Решение

Нет, правильный способ использовать это с name.raw потому что это поле, которое not_analyzed, Если вы используете только name Вы не используете not_analyzed версия, вы используете проанализированную версию с standard анализатор.

Вот почему filter('term', name='foo'}) соответствует обоим foo а также foo-1,

Другие вопросы по тегам