Ich versuche, eine dynamische Vorlage in ES zu verwenden, so dass alle Zeichenfolgenfelder Multifelder sind. Ich möchte auch bestimmte Zuordnungen auf bestimmte Felder anwenden.ElasticSearch Nest: AutoMap mit DynamicTemplates
Nehmen Sie das folgende Beispiel-Klasse:
[ElasticsearchType(Name = "sample1")]
public class Sample1
{
public string ID { get; set; }
[String(Index = FieldIndexOption.No)]
public string DoNotIndex { get; set; }
public string MultiField1 { get; set; }
public string MultiField2 { get; set; }
}
Ich möchte dann die dynamische Vorlage erstellen und die Zuordnung zu DoNotIndex
mit dem folgenden Befehl anwenden:
_client.Map<Sample1>(m => m
.AutoMap()
.DynamicTemplates(dt=> dt
.DynamicTemplate("all_strings_multifields", t => t
.MatchMappingType("string")
.Mapping(tm => tm
.String(mf => mf
.Index(FieldIndexOption.Analyzed)
.Fields(mff => mff
.String(s => s
.Name("raw")
.Index(FieldIndexOption.NotAnalyzed)
)
)
)
)
)
)
)
.VerifySuccessfulResponse();
Das Ergebnis ist:
{
"test1": {
"mappings": {
"sample1": {
"dynamic_templates": [
{
"all_strings_multifields": {
"match_mapping_type": "string",
"mapping": {
"fields": {
"raw": {
"type": "string",
"index": "not_analyzed"
}
},
"index": "analyzed",
"type": "string"
}
}
}
],
"properties": {
"doNotIndex": {
"type": "keyword",
"index": false
},
"iD": {
"type": "text"
},
"multiField1": {
"type": "text"
},
"multiField2": {
"type": "text"
}
}
}
}
}
}
Ergebnisse
Sie sehen, dass die DoNotIndex
Eigenschaft ist zwar richtig, aber die multifield1
und multifield2
sind nicht korrekt (sie sind nicht Multifelder).
Umgehung
Ich weiß, dass ich „reparieren“ kann dies durch NICHT die AutoMap()
tun und stattdessen jedes der spezielle Indizes spezifiziert, aber es gibt eine Menge von Feldern und das ist nicht so sauber eine Lösung.
Kann ich AutoMap mit DynamicTemplates erstellen?
YES! Danke Russ, der Beispielcode mit dem Besuchermuster hat super funktioniert. Ich habe es für ES 2.x anstelle von 5.x optimiert und alles sieht gut aus. Du schaukelst! – jhilden