如果查询在文档中至少匹配一次,如何获取2个或更多文档?

时间:2014-06-23 10:13:21

标签: elasticsearch

我是elasticsearch的新手。有没有办法编写匹配并列出所有匹配某些可用字段(包括常见字段)的文档的查询?

我试着用一个例子来说明这一点。

我有一个系统,根据一些标准,我们提出建议。像一个图表。例如。从产品,osname,架构(机器),发布,版本和&等等。我想首先将productosname与所有搜索相匹配。如果架构是x86,如果为true,则稍后搜索,然后将此文档添加到结果&然后,如果版本是Service Pack 1,则再次将其添加到结果中。最后,结果应包含3和& 4 docs两者都有公共字段product和osname,其中一个查询匹配短语" Service Pack 1"和其他比赛" x86"

如果查询满足条件,则以下是我的2条建议。 doc下面有产品& osname为常用字段。

PUT /support/recommendation/3
{
    "recommendation":"Suggested architecture 64 Bit",
    "type":"warning",
    "criteria": {
        "product": ["tar","zip"],
        "osname": "windows",
        "machine": "x86"    
    }   
}
PUT /support/recommendation/4
{
    "recommendation":"Service Pack 2 or more is needed",
    "type":"error",
    "criteria": {
        "product": ["tar","zip"],
        "osname": "windows",
        "release": "Service Pack 1"
    }   
}

我的查询

GET /support/recommendation/_search
{   /*search tar, windows, 32bit(x86) & SP1*/
    "query": {
        "filtered" : {
            "query": {
                "bool"   : {
                    "must": [
                       {"match": {
                          "product": "tar"
                       }
                       },
                       {"match": {
                          "osname": "Windows"
                       }               
                       }
                    ],
                    "must": [
                       {"match_phrase": {
                          "release": "Service Pack 1"
                       }}
                    ], 
                    "should": [
                       {"match": {  
                          "machine": "x86"
                       }               
                       }
                    ]
                }
            }            
        }
    }
}      

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:1)

如果你想要你的文档与他们匹配EITHER机器:x86 OR release:Service Pack 1,那么只需使用包含两者的should子句。

GET /support/recommendation/_search {   /*search tar, windows, 32bit(x86) & SP1*/
    "query": {
        "filtered" : {
            "query": {
                "bool"   : {
                    "must": [
                       {"match": {
                          "product": "tar"
                       }
                       },
                       {"match": {
                          "osname": "Windows"
                       }               
                       }
                    ],
                    "should": [
                       {"match": {  
                          "machine": "x86"
                          }               
                       },
                       {"match_phrase": {
                          "release": "Service Pack 1"
                       }
                      }
                    ],
                   "minimum_should_match" : 1
                }
            }            
        }
    } }

更新:添加了minimum_should_match子句