当前位置: 首页 > 面试题库 >

ElasticSearch-过滤类型

云韬
2023-03-14
问题内容

我已经将我的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更改为QueryContainerDescriptorFilterContainer现在QueryContainer。现在,由于.Type(typeof(ObjectAdo)不再可用,我无法执行与以前相同的操作。

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

https://i.stack.imgur.com/dOPex.png


问题答案:

在Elasticsearch
2.0中,查询和过滤器合并为一个,其中包含查询上下文和过滤器上下文的概念;当包装在布尔查询过滤器子句中时,查询/过滤器位于过滤器上下文中,因此不会计算相关性得分,并且可以缓存。

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)
        )
    );
}

查询的语法稍有type变化,采用了lambda表达式来设置可用选项。



 类似资料:
  • 问题内容: 我有一个这样的文档模型: 一个客户可以有0个,1个或多个订单,一个订单可以有0个,1个或多个orderLines (这是我为这个问题创建的模型,因为我认为这是每个人都可以理解的数据,因此,如果发现任何错误,请让我知道,但不要让他们分散我的实际问题) 我想使用NEST创建一个查询,该查询选择一个(或所有)具有customer.id特定值的客户,但前提是他们至少具有一个具有特定articl

  • 问题内容: “过滤后的查询和过滤器”与“根查询和过滤器”之间有什么区别吗?例如 情况1: 情况2: 我在http://elasticsearch-users.115913.n3.nabble.com/Filtered-query-vs-using- filter-outside-td3960119.html中 找到了此讨论,但所引用的URL是404,并且解释过于简洁我。 请示教或提供指出这些区别的

  • 问题内容: 我有一个类似下面的查询, 但是由于我的ID过滤器,我的构面未过滤。我得到了所有方面,但我希望通过上面的ID过滤器对其进行过滤。你有什么想法 ? 问题答案: 尽管您的工作可行,但更干净的解决方案是使用过滤查询。 http://www.elasticsearch.org/guide/reference/query-dsl/filtered- query/ 允许您使用原始查询+一些任意过滤器

  • 我在ES中有一个多匹配查询,希望添加一个过滤器。 添加此筛选器的语法是什么? 我试过:

  • 如何在执行查询前过滤ElasticSearch2.2中的文档。我引用了这个页面,但仍然无法框出正确的查询。 https://www.elastic.co/guide/en/elasticsearch/reference/2.2/query-filter-context.html 这就是我想做的…我有很多应该从句,每个有2个必须从句。WOLLE子句中的任何一个都应该匹配以检索文档。我只包括了一个sh

  • 我从事elasticsearch,我尝试混合两个工作查询。第一个是“and filter”,第二个是“bool filter”,但我失败了。 我的查询是从用户交互界面动态生成的。 “和过滤器”: 我需要“和过滤器”来查询数据,例如,字段必须等于“非洲”或“亚洲”或为空。这是一个工作查询的示例: 此查询工作正常,结果如下: 现在我需要用字段“D\u TYPESTATUS”来限制结果数据,该字段必须与