我的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 :(得分:1)
不,使用它的正确方法是使用not_analyzed
,因为这是name
字段。如果您仅使用not_analyzed
而未使用standard
版本,则将分析版本与filter('term', name='foo'})
分析器一起使用。
这就是foo
与foo-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>
匹配的原因。