ElasticSearch - 过滤类型

Posted

技术标签:

【中文标题】ElasticSearch - 过滤类型【英文标题】:ElasticSearch - Filtering the type 【发布时间】:2017-06-10 04:36:23 【问题描述】:

我已将我的 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) 不再可用。

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

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

【问题讨论】:

【参考方案1】:

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

NEST 2.x 及更高版本与 Elasticsearch 2.0 中的变化保持一致,并具有可用于查询和过滤上下文的查询(QueryContainerQueryContainerDescriptor&lt;T&gt; 等)。

将此应用于您的过滤器,意味着使用 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)
        )
    );

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

【讨论】:

我已经想通了。不过还是谢谢。我是弹性搜索概念的新手,所以我想知道别名索引(例如:my_blog)如何指向服务器中的多个索引,例如 my_blog-2017-12-06 或 my_blog-2017-12-09。如果你能告诉我就好了。 我已将 Nest 和 ElasticSearch.Net 升级到 v 5.0.0。我尝试使用 Kibana 查询并得到结果,但是从我的 .Net 应用程序查询时,我得到 0 个结果。我想知道问题可能是什么。 @Mark - 查看从 NEST 发送到 Elasticsearch 的查询,并将其与 Kibana 中发送的查询进行比较:elastic.co/guide/en/elasticsearch/client/net-api/current/…。查看用于向索引添加别名的索引别名 API:elastic.co/guide/en/elasticsearch/reference/current/…。这是 NEST 的示例:***.com/a/44147111/1831 再次感谢您的回复。去看看这些。 Russ Cam,你能看看这个吗? ***.com/questions/44601950/elasticsearch-auto-mapping

以上是关于ElasticSearch - 过滤类型的主要内容,如果未能解决你的问题,请参考以下文章

Elastic实战:彻底解决spring-data-elasticsearch日期时间类型数据读取报错问题

Elasticsearch字符过滤器

Elasticsearch 查询与过滤

7.elasticsearch字段类型列表

7.elasticsearch字段类型列表

我如何在 Elastic Search 中获得完全匹配过滤器结果