C# 如果嵌套数组包含值,则获取所有对象-ElasticSearch
如果嵌套列表包含来自另一个数组的值,我想返回一个对象列表。 例如:C# 如果嵌套数组包含值,则获取所有对象-ElasticSearch,c#,.net,
elasticsearch,C#,.net,
elasticsearch,如果嵌套列表包含来自另一个数组的值,我想返回一个对象列表。 例如: { "ListOfMainObject": [ { "Name": "Object1", "NestedArray": [ "Value1", "Value2" ] }, { "Name": "Object2", "NestedArray"
{
"ListOfMainObject": [
{
"Name": "Object1",
"NestedArray": [
"Value1",
"Value2"
]
},
{
"Name": "Object2",
"NestedArray": [
"Value1",
"Value3"
]
},
{
"Name": "Object3",
"NestedArray": [
"Value2",
"Value3"
]
}
]}
如果我有一个数组,例如[“Value1”],它应该返回Object1和Object2的列表。另外,如果我有数组[“Value1”,“Value2”],它应该只返回Object1,因为只有Object1包含这些值
目前,我有此筛选函数用于设置此查询,但如果我在数组中发送两个值,则会排除所有内容:
private List<Func<QueryContainerDescriptor<Unit>, QueryContainer>> GetFacetFilters(IList<string> facets)
{
var filters = new List<Func<QueryContainerDescriptor<Unit>, QueryContainer>>();
if (facets == null)
{
return filters;
}
foreach (var facet in facets)
{
QueryContainer Filter(QueryContainerDescriptor<Unit> f) => f
.Bool(bo => bo
.Must(m => m.MatchPhrase(md => md.Field(new Field("facets.visible")).Query("true")))
.Should(s => s.MatchPhrase(md => md.Field(new Field("facets.alias")).Query(facet))));
filters.Add(Filter);
}
return filters;
}
私有列表GetFacetFilters(IList facets)
{
var filters=新列表();
if(facets==null)
{
回流过滤器;
}
foreach(facets中的var facet)
{
QueryContainer筛选器(QueryContainerDescriptor f)=>f
.Bool(bo=>bo
.Must(m=>m.MatchPhrase(md=>md.Field(新字段(“facets.visible”)).Query(“true”))
.Should(s=>s.MatchPhrase(md=>md.Field(新字段(“facets.alias”)).Query(facet));
过滤器。添加(过滤器);
}
回流过滤器;
}
“Unit”是主对象,“Facets”是嵌套数组
提前谢谢
p.S..net elastic search您的示例数据似乎是一个JSON集合,但您提供了c#和.net标记,因此我假设您在某个时候有能力对一组c#对象进行操作 使用LINQ,您可以返回NesteArray属性包含单独数组所有值的MainObjects子集,如下所示:
List<MainObject> mainObjectList = {...} // object collection
var requiredValues = {...} // e.g. ["Value1", "Value2"];
mainObjectList.Where(x => !requiredValues.Except(x.NestedArray).Any());
List mainObjectList={…}//对象集合
var requiredValues={…}//例如:[“Value1”、“Value2”];
mainObjectList.Where(x=>!requiredValues.Exception(x.NestedArray.Any());
是的,这是一个C#对象,但我想描述一下。但是,我需要在没有经典linq的情况下使用elasticsearch filters.Gotcha。嗯,我在那里没有经验,所以希望其他人能给你一个答案!