【问题标题】:Minimum Number Should Match, Should match with POST最小数量应匹配,应与 POST 匹配
【发布时间】:2017-02-23 03:49:24
【问题描述】:

我正在尝试查询 elasticsearch 5.2 休息端点:

{
    "query": {
        "bool": {
            "should": [
                {"match": { "file-source": "css" }},
                {"match": { "file-source": "js" }}
            ],
            "minimum_number_should_match": 2
        }
    }
}

但是,这在 ElasticSearch 中返回 NO HITS,我不明白为什么这不起作用,并且 ElasticSearch 文档中的示例很少。

我正在尝试同时匹配两者。但它可能是 OR。

有文件源:“css”,文件源:“js”,文件源:“json”

但我想要一个 CSS 和 JS 的选项...

以下是使用 Java API 测试相同的一些示例 Java 代码:

// conditions met from the form
query.should(QueryBuilders.matchQuery("file-source", "css"));
query.should(QueryBuilders.matchQuery("file-source", "js"));
query.minimumNumberShouldMatch(2);

【问题讨论】:

    标签: java elasticsearch


    【解决方案1】:

    让我们解释给定的查询。

    "should": [
                {"match": { "file-source": "css" }},
                {"match": { "file-source": "js" }}
            ]
    

    这将返回所有文件源为 css 或 js 的文档。

          A = <documents with file-source = css or jss>
    
         "minimum_number_should_match": 2
          B = A <documents with file-source at least 2 of css, jss>
    

    这将缩小结果并将 A 限制为同时具有 css 和 js 的文档。记住“css OR js”也包含“css and js”。但是在您的情况下,似乎每个文档都有唯一的文件源,因此 A 将成为一个空集,因为没有“css 和 js”。

    在这种情况下,B 变为空,因为没有具有 file-source = css 和 jss 的文档

    尝试删除 - "minimum_number_should_match": 2。它应该可以工作。

    【讨论】:

    • 是的,但是当我按照你的方式进行操作时,它也会返回文件源“JSON”和“XML”!!我想我正在寻找 "ONLY X OR Y"
    • 尝试添加“minimum_should_match”:1
    • 是的,我认为现在可行。我想我不明白 minimum_number_should 与 minimum_should。另外为什么“2”不能很好地工作?但是“1”有效吗? “1”,其中 1 个应该匹配。 2 我猜,两者都应该存在?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    相关资源
    最近更新 更多