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

C# ElasticSearch-筛选类型

C# ElasticSearch-筛选类型,c#,.net,elasticsearch,nest,C#,.net,elasticsearch,Nest,我已经将elasticsearch从v1.9升级到v5,我注意到很多事情都发生了变化 如果我以v1.9为例:下面的代码检查对象类型是否匹配ObjectAdo,并过滤ObjectAdo中IsDeleted字段为false的项 private Func<FilterDescriptor<dynamic>, FilterContainer> Filter() { return b => b.Bool(x => x.Must(m

我已经将elasticsearch从v1.9升级到v5,我注意到很多事情都发生了变化

如果我以v1.9为例:下面的代码检查对象类型是否匹配
ObjectAdo
,并过滤
ObjectAdo
IsDeleted
字段为
false
的项

private Func<FilterDescriptor<dynamic>, FilterContainer> Filter()
        {
            return b => b.Bool(x => x.Must(m => m.Type(typeof(ObjectAdo)), n => n.Term("IsDeleted", false)));
        }
private Func Filter()
{
返回b=>b.Bool(x=>x.Must(m=>m.Type(typeof(ObjectAdo)),n=>n.Term(“IsDeleted”,false));
}
现在,在从v1.9升级到v5之后,我注意到
FilterDescriptor
被更改为
QueryContainerDescriptor
,而
filterdcontainer
现在是
QueryContainer
。现在我无法执行与以前相同的操作,因为
.Type(typeof(ObjectAdo)
不再可用

因此,我想知道是否有其他解决方案来检查对象类型

在Elasticsearch 2.0中,具有查询上下文和筛选上下文的概念;当包装在bool查询筛选子句中时,查询/筛选位于筛选上下文中,因此不会计算相关性分数,并且可以缓存

NEST 2.x之后的版本与Elasticsearch 2.0中的更改保持一致,并具有可在查询和筛选上下文中使用的查询(
QueryContainer
QueryContainerDescriptor
,等等)

将此应用于过滤器,意味着使用NEST 5.x将其更改为以下内容

private Func<QueryContainerDescriptor<dynamic>, QueryContainer> Filter()
{
    return b => b.Bool(x => x
        .Filter(
            f => f.Type(t => t.Value(typeof(ObjectAdo))),
            f => f.Term("IsDeleted", false)
        )
    );
}
private Func Filter()
{
返回b=>b.Bool(x=>x
.过滤器(
f=>f.Type(t=>t.Value(typeof(ObjectAdo)),
f=>f.Term(“IsDeleted”,false)
)
);
}

s需要使用lambda表达式来设置可用选项。

我已经解决了这个问题。不过还是要谢谢你。我对弹性搜索概念还不熟悉,所以我想知道别名索引(比如:my_blog)指向服务器中的多个索引,如my_blog-2017-12-06或my_blog-2017-12-09。如果您能让我知道,那就太好了。我已将Nest和ElasticSearch.Net升级到v 5.0.0。我尝试使用Kibana进行查询,得到了结果,但从.Net应用程序进行查询时,得到了0个结果。我想知道问题出在哪里。@Mark-看一看t将查询从NEST发送到Elasticsearch,并将其与Kibana中发送的查询进行比较:。查看用于向索引添加别名的索引别名API:。以下是NEST的示例:再次感谢您的回复。要查看这些。Russ Cam,您能看一下吗?