0

私はelasticsearch_dslクラスに、完全一致を照会したいものをいくつか持っています:

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

それは機能しますが、常にクエリに a を追加する必要があり、正確に.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、 を使用できるはずです。

正しい方法は何ですか?

4

1 に答える 1

1

いいえ、それを使用する正しい方法は withです。name.rawこれは であるフィールドだからですnot_analyzednameバージョンを使用していない場合のみ使用する場合not_analyzedは、分析されたバージョンをstandardアナライザーで使用します。

そのため、 と の両方にfilter('term', name='foo'})一致します。foofoo-1

于 2016-07-14T10:31:00.183 に答える