【发布时间】:2018-02-28 13:18:18
【问题描述】:
我有一个带有嵌套对象数组的简单对象
public class Product {
public Guid Id { get; set; } = Guid.NewGuid();
public string Name { get; set; }
public ProductTag[] Tags {get; set;} = new ProductTag[0];
}
public class ProductTag {
public string TagName {get; set;}
public string Color {get; set;} = "orange";
}
其中Tags 是mapped as a nested datatype 使用
client.CreateIndex(Indices.Index<Product>(), d =>
d.Mappings(m =>
m.Map<Product>(mm => mm
.AutoMap()
.Properties(pd => pd
.Text(tpd => tpd.Name(x => x.Name))
.Nested<ProductTag>(npd => npd
.Name(x => x.Tags)
.AutoMap()
.Properties(pd2 => pd2
.Keyword(kpd => kpd
.Name(x => x.Color)
)
)
)
)
)
)
我无法为我的生活弄清楚如何查询所有产品的产品索引,例如标签带有“橙色”的TagName。
我设法做到了这一点,然后我不知道
client.Search<Product>(s => s
.Query(q => q
.Nested(nqd => nqd
.Path(x => x.Tags)
.Query(qcd => qcd
.Bool(bqd => bqd
.Must(qcd
.Match(mqd => mqd
.???
)
)
)
)
)
)
由于Nested 似乎没有设置另一种类型来查询,我对如何进行此查询有点迷茫。
【问题讨论】:
-
试试 mqd.Tags.TagName,"orange"
-
@sramalingam24 这是使用嵌套闭包模式的 c#,因此它是强类型的。那不会编译
-
哎呀忘了 .First() 那里。有关类似示例,请参见此处stackoverflow.com/questions/26800533/…
-
@sramalingam24 是的!做到了(也只是
.Field("tags.tagName").Query("admiral")似乎有效 - 在我阅读他们的文档关于他们如何使用隐式转换运算符之前,我没想过尝试它。想要从你的回复中做出答案,我会标记它是正确的? -
很高兴你发现它有用,谢谢
标签: .net elasticsearch nest