【发布时间】:2020-04-26 01:09:49
【问题描述】:
我想从名为“userprofiles”的索引中的文档中检索嵌套对象。
我的 UserProfile 模型:
公共类 UserProfileModel
{
public string FullName { get; set; }
public string Oid { get; set; }
public string Upn { get; set; }
public List<SsoLink> FavoriteSsoLinks { get; set; } = new List<SsoLink>();
}
我的 SsoLink 模型:
public class SsoLink
{
public string Id { get; set; }
public string Name { get; set; }
public string Url { get; set; }
public string Owner { get; set; }
}
索引创建:
PUT userprofiles
{
"mappings" : {
"properties" : {
"FavoriteSsoLinks" : {
"type" : "object"
}
}
}
}
我的查询:
var searchResponse = _client.Search<UserProfileModel>(s => s
.Index(_profileIndex)
.Query(q=>q
.Term(t => t.Field(t => t.Oid).Value(oid)
)
)
);
现在它返回文档,但是 favoritelinks 对象是空白的,但是我看到 Kibana 列出的对象。我一定遗漏了一些明显的东西,但很难弄清楚这一点。
这是我的数据示例:
【问题讨论】:
-
查询似乎是正确的。你能从你的索引中添加一个示例文档吗
-
查询没问题,我试过了。可能是您正在搜索 oid 的文档可能没有 favoriteSsoLinks 值。您应该运行 { "query": { "term": { "oid": { "value": "VALUE" } } } } 并在 kibana 开发工具中检查值
-
有趣的是,我正在尝试查找 oid = "someOID" 的所有 favoriteSsoLinks。您是如何制作索引的?
-
我刚刚创建了一个包含对象类型和文本字段的示例示例文档,并且我返回的模型具有对象字段。在您的情况下,您可以在 kibana 开发工具中运行查询以确保“favoriteSsoLinks”具有值(可能为空),或者如果您正在使用源过滤,那么您将提及此字段
-
好的,所以当我使用开发工具搜索时 GET userprofiles/_search { "query": { "term": { "_id": { "value": "1-123-1234-1232- 41234-12341" } } } } 我可以看到响应,但在我的代码中我没有让他们返回 favoriteSsoLinks...
标签: c# elasticsearch nest elasticsearch-query