MinimumShouldMatch不附加到"应该"使用Nest ElasticSearch中的对象初始化程序语法构建的Bool查询中的子句

时间:2017-03-27 21:42:45

标签: elasticsearch asp.net-core nest

我正在使用NEST对象初始化程序语法在给定用户输入的情况下动态构建我的查询。我使用的查询格式是这样的:

"query": {
        "bool": {
            "should": [{
                "range": {
                    "field1": {
                        "lt": x
                    }
                }
            }, {
                "range": {
                    "field2": {
                        "lt": y
                    }
                }
            }],
            "filter": [{
                ...
            }]
        }
    }

上述查询不起作用,因为过滤器会覆盖should,除非should子句有" minimum_should_match"附加到它的字段,如下:

"query": {
        "bool": {
            "should": [{
                "range": {
                    "field1": {
                        "lt": x
                    }
                }
            }, {
                "range": {
                    "field2": {
                        "lt": y
                    }
                }
            }],
            "minimum_should_match" = "1",
            "filter": [{
                ...
            }]
        }
    }

但是,我似乎找不到正确定位minimum_should_match子句的方法,以便它位于should和filter之间。 BoolQuery接受" MinimumShouldMatch"字段,但是在过滤器之后而不是在应该之前追加它。

有没有办法做到这一点,或者我将不得不使用原始搜索输入?

1 个答案:

答案 0 :(得分:0)

根据Russ Cam的评论,“minimum_should_match”子句的定位并不重要。我在测试中犯了一个错误,让我认为过滤器被覆盖了,我错误地认为定位是问题所在。我去了并重新测试了查询,它运行正常。