{ "query": { "bool": { "must": [ { "match": { "gender": "M" } }, { "match": { "address": "mill" } } ] } } } bool: 这是一个布尔查询,用于组合多个查询条件。must: 表示查询中必须满足的条件。如果文档不满足must中的任何条件,它将不会被包含在搜索结果中。具体到这段代码,它定义了一个查询,其条件如下:
gender:"M")mill
{ "query": { "bool": { "must": [ { "match": { "gender": "M" } }, { "match": { "address": "mill" } } ], "must_not": [ { "match": { "age": "28" } } ] } } } bool: 布尔查询组合多个查询条件。must: 表示查询中必须满足的条件。如果文档不满足must中的任何条件,它将不会被包含在搜索结果中。must_not: 表示查询中必须不满足的条件。如果文档满足must_not中的任何条件,它将不会被包含在搜索结果中。具体到这段代码,定义了一个bool查询,其条件如下:
gender:"M")millage:"28")
在布尔查询中,should子句用于指定一组可选条件。这些条件不是必须满足的,但如果文档满足这些条件,它们可以提高文档的相关性得分(即_score)。should子句通常与minimum_should_match参数一起使用,这个参数指定了至少需要多少个should条件被满足,文档才会被认为是匹配的。
这里是should子句的一些关键点:
should中的条件是可选的,不强制要求文档必须满足。should中的条件,它的得分可能会提高,这取决于查询的构建方式和Elasticsearch的算法。minimum_should_match:这个参数定义了至少需要多少个should条件被满足。例如,如果你有3个should条件,你可以设置minimum_should_match为2,这意味着文档至少需要满足2个条件才能被认为是匹配的。must和must_not结合使用:should可以与must(必须满足的条件)和must_not(必须不满足的条件)一起使用,以构建复杂的查询。GET bank/_search { "query": { "bool": { "must": [ { "match": { "gender": "M" } }, { "match": { "address": "mill" } } ], "must_not": [ { "match": { "age": "18" } } ], "should": [ { "match": { "lastname": "Wallace" } } ], "minimum_should_match": 0 } } } bool:布尔查询,它允许组合多个查询条件。
must:包含必须满足的查询条件。文档必须满足must中的所有条件才会被包含在搜索结果中。在这个例子中,must有两个条件:
must_not:包含必须不满足的查询条件。文档如果满足must_not中的任何条件,将不会被包含在搜索结果中。在这个例子中,must_not有一个条件:
should:包含可选的查询条件。如果文档满足should中的条件,它可以提高文档的相关性得分,但不是必需的。在这个例子中,should有一个条件:
minimum_should_match:指定至少需要多少个should条件被满足。在这个例子中,minimum_should_match设置为0,这意味着即使没有should条件被满足,文档也可以出现在搜索结果中。这个设置通常用于不强制要求should条件,但希望它们能够影响文档得分的情况。
总结来说,这个查询将返回bank索引中满足以下条件的文档:
需要注意的,should和minimum_should_match配合使用,如果minimum_should_match等于1,必须满足should中至少1个条件,相当于must,当比must更灵活,因为should中如果有多个条件的话,只需要满足任意一个即可。
如果,把上面的查询中的minimum_should_match值改为1,则查询出来的结果更少。