У меня есть в моем классе elasticsearch_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
, потому что она должна быть такой же.
Каков правильный путь?
Вам просто нужно индексировать основное поле как 'not_analyzed', но предпочтительным способом было бы иметь' raw' -поле, как вы его сейчас. –
Я индексировал его как 'not_analyzed', см. Класс DocType, который я подключил. – shredding