gpt4 book ai didi

c# - ElasticSearch-过滤类型

转载 作者:行者123 更新时间:2023-12-03 00:06:54 24 4
gpt4 key购买 nike

我已经将我的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)));
}

现在,从v1.9升级到v5后,我注意到 FilterDescriptor更改为 QueryContainerDescriptor,而 FilterContainer现在是 QueryContainer。现在,我无法执行与以前相同的操作,因为 .Type(typeof(ObjectAdo)不再可用。

所以我想知道是否有替代解决方案来检查对象类型。

/image/dOPex.png

最佳答案

在Elasticsearch 2.0中,queries and filters merged into one为查询上下文和过滤器上下文的概念;当包装在 bool(boolean) 查询过滤器子句中时,查询/过滤器位于过滤器上下文中,因此不会计算相关性得分,并且可以缓存。

NEST 2.x及更高版本与Elasticsearch 2.0中的更改保持一致,并具有可在查询和过滤器上下文中使用的查询(QueryContainerQueryContainerDescriptor<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)
)
);
}

s yntax for a type query has changed a little采取lambda表达式来设置可用选项。

关于c# - ElasticSearch-过滤类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44345151/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com