Ich habe ein paar Dinge in meinem elasticsearch_dsl Klasse, die ich für eine exakte Übereinstimmung abfragen möchten:Wie man auf nicht analysierten Feldern abfragt?
class Profile(DocType):
name = String(fields={'raw': String(index='not_analyzed')})
Während das funktioniert, ich brauche immer eine .raw
auf die Abfrage hinzuzufügen und nicht name
genau abfragen können:
# 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'})
das fühlt sich irgendwie falsch, wie ich in der Lage sein sollte, nur name
zu verwenden und nicht raw
, weil es das gleiche sein soll.
Was ist der richtige Weg?
Sie müssen nur Ihr Hauptfeld als "not_analyzed" indizieren, aber die bevorzugte Methode wäre ein "roher" Feld, wie Sie es jetzt haben. –
Ich habe es als 'not_analyzed' indiziert, siehe DocType-Klasse, die ich angehängt habe. – shredding