gpt4 book ai didi

.net - 如何对对象数组进行嵌套查询

转载 作者:行者123 更新时间:2023-12-03 00:39:49 25 4
gpt4 key购买 nike

我有一个带有嵌套对象数组的简单对象

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";
}

其中 Tagsmapped 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为“orange”的标签的产品。

我设法做到这一点,然后我不知道
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似乎未设置要查询的另一种类型,我对如何执行此查询有些迷惑。

最佳答案

以下将做到这一点

client.Search<Product>(s => s
.Query(q => q
.Nested(nqd => nqd
.Path(x => x.Tags)
.Query(qcd => qcd
.Match(mqd => mqd
.Field(f => f.Tags.First().TagName)
.Query("orange")
)
)
)
)
);

产生
{
"query": {
"nested": {
"query": {
"match": {
"tags.tagName": {
"query": "orange"
}
}
},
"path": "tags"
}
}
}

用于获取字段名称的lambda表达式就是那个表达式。 NEST理解在这种情况下LINQ方法 .First()是遍历目标字段的表达式的一部分。您也可以使用
f => f.Tags[0].TagName
f => f.Tags.Last().TagName
f => f.Tags.Single().TagName
f => f.Tags.ElementAt(0).TagName
f => f.Tags.Max().TagName

或任何其他LINQ表达式,这些表达式将返回可以访问其属性的 ProductTag,并表示一个 MemberExpression

关于.net - 如何对对象数组进行嵌套查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49000423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com