elasticsearch,nest,C#,elasticsearch,Nest" /> elasticsearch,nest,C#,elasticsearch,Nest" />

C# ElasticSearch嵌套客户端中Sql Case语句的实现

C# ElasticSearch嵌套客户端中Sql Case语句的实现,c#,elasticsearch,nest,C#,elasticsearch,Nest,我正在为.NET开发Elasticsearch NEST客户端。 我必须在ES中实现CASE语句quivaleitn查询 CASE WHEN [CompanyId] <> 1 AND VisibilityId=1 AND [Publish] = 1 AND StatusId = 1 THEN 1 WHEN [OrganizationId] = 1 THEN 1 ELSE 0 END = 1 案例 当[CompanyId]1且VisibilityId=1且[Publish]=1

我正在为.NET开发Elasticsearch NEST客户端。 我必须在ES中实现CASE语句quivaleitn查询

CASE 
WHEN [CompanyId] <> 1 AND VisibilityId=1 AND [Publish] = 1 AND StatusId = 1 THEN 1
WHEN [OrganizationId] = 1 THEN 1 
ELSE 0 
END = 1
案例
当[CompanyId]1且VisibilityId=1且[Publish]=1且StatusId=1时,则为1
当[OrganizationId]=1时,则为1
其他0
结束=1
很明显,我不知道该怎么做。在过去的两天里,我一直在重新搜索,但什么也没找到

它是否可以像我在前面几行中所做的那样与术语过滤器一起使用,如:

new FilterDescriptor<MyClass>()
                                .Term("OrganizationId", 1)
newfilterdescriptor()
.术语(“组织ID”,1)

我通过将
Bool查询
或过滤器
组合在一起实现了它,如下所示:

new FilterDescriptor<ListingViewDTO>()
        .Or(fo => fo.Bool(b => b.Must(c => c.And(
                fs => !fs.Term("OrganizationId", compositeFilter.OrganizationId),
                fs => fs.Query(q => q.Fuzzy(n => n.OnField("ListingAttributeDTO.AttributeName").Value("ListingPublish"))),
                fs => fs.Query(q => q.Fuzzy(n => n.OnField("ListingAttributeDTO.Value").Value("1"))),
                fs => fs.Term("VisibilityId", (int)Visibility.AnyOne),
                fs => fs.Term("StatusId", 2)))),
            fo => fo.Term("OrganizationId", compositeFilter.OrganizationId));
newfilterdescriptor()
.Or(fo=>fo.Bool(b=>b.Must)(c=>c.And(
fs=>!fs.Term(“OrganizationId”,compositeFilter.OrganizationId),
fs=>fs.Query(q=>q.Fuzzy(n=>n.OnField(“ListingAttributeDTO.AttributeName”).Value(“ListingPublish”),
fs=>fs.Query(q=>q.Fuzzy(n=>n.OnField(“ListingAttributeDTO.Value”).Value(“1”)),
fs=>fs.Term(“VisibilityId”,(int)Visibility.any),
fs=>fs.Term(“StatusId”,2)),
fo=>fo.Term(“OrganizationId”,compositeFilter.OrganizationId));

我通过布尔查询和或过滤器的组合实现了它