您可以定義Data
爲您POCO一個Dictionary<string. object>
和索引本作中Elasticsearch的object
字段類型,將被編入索引,按您的例子。
然後,您可以在搜索時在字典中使用特定的鍵如
public class Document
{
public Dictionary<string, object> Data { get; set; }
}
var client = new ElasticClient();
client.CreateIndex("my-index", c => c
.Mappings(m => m
.Map<Document>(mm => mm
.AutoMap()
.Properties(p => p
.Object<Dictionary<string, object>>(o => o
.Name(n => n.Data)
)
)
)
)
);
創建以下映射
{
"mappings": {
"document": {
"properties": {
"data": {
"type": "object"
}
}
}
}
}
那麼我們可以搜索針對特定關鍵
client.Search<Document>(s => s
.Query(q => q
.Term(f => f.Data["sameAttr"], "some Value")
)
);
這將是下面的搜索
{
"query": {
"term": {
"data.sameAttr": {
"value": "some Value"
}
}
}
}
一件事,你NE編輯以知道是否允許任意鍵是在不同文檔中Data
中給定鍵的值類型必須相同;有一些可能爲了轉換爲指數類型的組合,但_source
仍然會送你什麼。爲避免任何潛在的問題,請對相同的密鑰使用相同的類型。