match 和 bool 之间有什么区别必须匹配 Elasticsearch 中的查询
What is difference between match and bool must match query in Elasticsearch
Only match 和 bool must match query 在 ES 中有什么区别?
首先,只使用匹配查询
{
"query":{
"match":{
"address":"mill"
}
}
}
二、使用复合查询
{
"query": {
"bool": {
"must": [
{ "match": { "address": "mill" } }
]
}
}
}
你能告诉我一切吗?
它们有什么区别?
正如您在问题中所写,他们将执行相同的操作。
match
查询是一个非常直接的全文条件语句。
bool query allows you to add multiple fields and multiple conditions such as exists(验证某个字段是否在文档中找到)、should
(等价的 OR)和 must_not
(不等价的)。
再次以您的示例为例,由于 bool
查询只有一个 must, match
条件,因此它只会 return 包含值 mill
的所有文档address
字段。
希望对您有所帮助! :)
当您在 bool must
子句中仅使用一个 match
时,则没有区别,当您想组合多个(布尔)条件时,bool 子句很有用,有关 [= 的更多信息20=]。它支持以下标准。
- 必须
- must_not
- 过滤器
- 应该
让我从你的问题中举一个小例子来说明。
只有地址和 first_name
的索引映射
{
"mappings": {
"properties": {
"address": {
"type": "text"
},
"first_name" :{
"type" : "text"
}
}
}
}
索引 3 个文档,地址相同 mill
,但不同 first_name
{
"address" : "mill",
"first_name" : "Johnson"
}
{
"address" : "mill",
"first_name" : "Parker"
}
{
"address" : "mill",
"first_name" : "opster"
}
搜索查询以显示 mill
但 must_not 包含 first_name 作为 parker
的所有地址
{
"query": {
"bool": {
"must": [
{
"match": {
"address": "mill"
}
},
{
"must_not": {
"first_name": "parker"
}
}
]
}
}
}
结果只有2个地址
"hits": [
{
"_index": "so-60620921-bool",
"_type": "_doc",
"_id": "2",
"_score": 0.13353139,
"_source": {
"address": "mill",
"first_name": "opster"
}
},
{
"_index": "so-60620921-bool",
"_type": "_doc",
"_id": "3",
"_score": 0.13353139,
"_source": {
"address": "mill",
"first_name": "Johnson"
}
}
]
根据OP评论,提供query and filter context,详细了解性能方面。
Only match 和 bool must match query 在 ES 中有什么区别?
首先,只使用匹配查询
{
"query":{
"match":{
"address":"mill"
}
}
}
二、使用复合查询
{
"query": {
"bool": {
"must": [
{ "match": { "address": "mill" } }
]
}
}
}
你能告诉我一切吗? 它们有什么区别?
正如您在问题中所写,他们将执行相同的操作。
match
查询是一个非常直接的全文条件语句。
bool query allows you to add multiple fields and multiple conditions such as exists(验证某个字段是否在文档中找到)、should
(等价的 OR)和 must_not
(不等价的)。
再次以您的示例为例,由于 bool
查询只有一个 must, match
条件,因此它只会 return 包含值 mill
的所有文档address
字段。
希望对您有所帮助! :)
当您在 bool must
子句中仅使用一个 match
时,则没有区别,当您想组合多个(布尔)条件时,bool 子句很有用,有关 [= 的更多信息20=]。它支持以下标准。
- 必须
- must_not
- 过滤器
- 应该
让我从你的问题中举一个小例子来说明。
只有地址和 first_name
的索引映射{
"mappings": {
"properties": {
"address": {
"type": "text"
},
"first_name" :{
"type" : "text"
}
}
}
}
索引 3 个文档,地址相同 mill
,但不同 first_name
{
"address" : "mill",
"first_name" : "Johnson"
}
{
"address" : "mill",
"first_name" : "Parker"
}
{
"address" : "mill",
"first_name" : "opster"
}
搜索查询以显示 mill
但 must_not 包含 first_name 作为 parker
的所有地址
{
"query": {
"bool": {
"must": [
{
"match": {
"address": "mill"
}
},
{
"must_not": {
"first_name": "parker"
}
}
]
}
}
}
结果只有2个地址
"hits": [
{
"_index": "so-60620921-bool",
"_type": "_doc",
"_id": "2",
"_score": 0.13353139,
"_source": {
"address": "mill",
"first_name": "opster"
}
},
{
"_index": "so-60620921-bool",
"_type": "_doc",
"_id": "3",
"_score": 0.13353139,
"_source": {
"address": "mill",
"first_name": "Johnson"
}
}
]
根据OP评论,提供query and filter context,详细了解性能方面。