私はすべての文字列フィールドがマルチフィールドであるようにESで動的テンプレートを使用しようとしています。特定のフィールドにいくつかの特定のマッピングを適用したいと思っています。ElasticSearchネスト:DynamicTemplatesを使用したAutoMap
次の例のクラスを取る:
[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; }
}
私は、動的テンプレートを作成し、次のコマンドを使用してDoNotIndex
へのマッピングを適用する:
_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();
結果は次のとおりです。
{
"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"
}
}
}
}
}
}
結果
DoNotIndex
プロパティは実際に正しいと表示されますが、multifield1
とmultifield2
は正しくありません(マルチフィールドではありません)。
回避策
は私がAutoMap()
をやって、代わりに特殊なインデックスのそれぞれを指定するが、フィールドがたくさんあるませことによって、これを「修正」することができます知っていて、それが解決策のようにきれいではありません。
DynamicTemplatesでAutoMapを実行できますか?
を作り出します!ラス、ありがとう、訪問者のパターンとのサンプルコードは素晴らしい仕事をした。私は5.xの代わりにES 2.xのためにそれを微調整し、すべてが良く見えます。あなたはロック! – jhilden