ElasticSearch (NEST) 查询以排除特定术语结果

如何解决ElasticSearch (NEST) 查询以排除特定术语结果

我正在尝试找到一个 QueryContainer 查询,我可以在 ElasticSearch 结果上执行该查询,该查询基本上会过滤掉我的结果集中的任何“A”状态项。我的 ProductIndex 文档包含一个名为“StatusCode”的字段,我不想将这些“A”状态返回到我的搜索结果集......我最难找到删除这些项目的方法

查询正确找到这些“A”状态':

.Match(qm => qm
             .Field(f => f.StatusCode)
            .Query("A"));

但我想做相反的事情(不是得到所有的“A”状态项,而是排除它们)

基于我在这里阅读的其他线程,我提出了以下查询,但它没有过滤掉这些结果:

.Bool(b => b
        .MustNot(mn => mn
            .Terms(t => t
                .Field(f => f.StatusCode)
                .Terms("A")
            )
        ));

.Bool(b => b
        .MustNot(mn => mn
            .Term(t => t
                .Field(f => f.StatusCode).Value("A")
            )
        ));

但两者都不会删除具有“A”状态码的结​​果

仍在返回但状态为“A”代码的结果的 Kibana 值:

enter image description here

解决方法

MustNot 过滤器仍然对我不起作用 - 我最终通过执行两个搜索查询来解决这个问题 - 一个基于从第一个查询中获得的结果集

.Match(qm => qm
             .Field(f => f.StatusCode)
            .Query("A"));

这正确过滤了项目以仅返回我试图从主查询中删除的项目。我获得了这个文档列表,然后将此列表作为排除过滤器应用于我的底层请求,从而过滤掉了我不再想返回的项目。

没有我想要的那么优雅,但完成了工作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?