2016-07-14 2 views
0

У меня есть в моем классе 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, потому что она должна быть такой же.

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

+0

Вам просто нужно индексировать основное поле как 'not_analyzed', но предпочтительным способом было бы иметь' raw' -поле, как вы его сейчас. –

+0

Я индексировал его как 'not_analyzed', см. Класс DocType, который я подключил. – shredding

ответ

1

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

Именно поэтому filter('term', name='foo'}) соответствует как foo, так и foo-1.

Смежные вопросы