C# ElasticSearch-筛选类型
我已经将elasticsearch从v1.9升级到v5,我注意到很多事情都发生了变化 如果我以v1.9为例:下面的代码检查对象类型是否匹配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
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,您能看一下吗?