Как сделать запрос по неанализированным полям?
У меня есть несколько вещей в моем классе 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
,