2016-07-14 70 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'})匹配foofoo-1

相關問題