如何查询未分析的字段?

时间:2016-07-14 08:42:14

标签: elasticsearch elasticsearch-dsl elasticsearch-py

我的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,因为它应该是相同的。

什么是正确的方式?

1 个答案:

答案 0 :(得分:1)

不,使用它的正确方法是使用not_analyzed,因为这是name字段。如果您仅使用not_analyzed而未使用standard版本,则将分析版本与filter('term', name='foo'})分析器一起使用。

这就是foofoo-1<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/re/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#000000"> <RelativeLayout android:id="@+id/loadingLayout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:scrollbars="none" > </RelativeLayout></RelativeLayout> 匹配的原因。