C# ElasticSearch嵌套客户端中Sql Case语句的实现
我正在为.NET开发Elasticsearch NEST客户端。 我必须在ES中实现CASE语句quivaleitn查询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
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));
我通过布尔查询和或过滤器的组合实现了它