我已经将我的Elasticsearch从v1.9升级到v5,并且我注意到很多事情已经改变。
如果我以v1.9为例:以下代码检查对象类型是否匹配ObjectAdo,并过滤ObjectAdo其中IsDeleted字段为的项目false。
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))); }
现在,从v1.9升级到v5后,我注意到已FilterDescriptor更改为QueryContainerDescriptor和FilterContainer现在QueryContainer。现在,由于.Type(typeof(ObjectAdo)不再可用,我无法执行与以前相同的操作。
FilterDescriptor
QueryContainerDescriptor
FilterContainer
QueryContainer
.Type(typeof(ObjectAdo)
所以我想知道是否有替代解决方案来检查对象类型。
https://i.stack.imgur.com/dOPex.png
在Elasticsearch 2.0中,查询和过滤器合并为一个,其中包含查询上下文和过滤器上下文的概念;当包装在布尔查询过滤器子句中时,查询/过滤器位于过滤器上下文中,因此不会计算相关性得分,并且可以缓存。
NEST 2.X与Elasticsearch 2.0的变化起对准并具有查询(QueryContainer,QueryContainerDescriptor<T>,等),可以在查询和过滤器的环境中使用。
QueryContainerDescriptor<T>
将其应用于您的过滤器,意味着使用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) ) ); }
查询的语法稍有type变化,采用了lambda表达式来设置可用选项。
type