ElasticSearch |布尔查询
我正在使用bool查询“必须”和“不得”功能。在我到达一个三层楼深的地方之前,它一直在按预期工作。例如,一个简单的匹配查询,如ElasticSearch |布尔查询,search,
elasticsearch,boolean,Search,
elasticsearch,Boolean,我正在使用bool查询“必须”和“不得”功能。在我到达一个三层楼深的地方之前,它一直在按预期工作。例如,一个简单的匹配查询,如 GET city/town/_search { "query": { "match": { "contact.residence.address": "Rocky Road" } } } 工作正常并返回结果,但如果我在bool查询中执行相同的操作,如 GET city/town/_search
GET city/town/_search
{
"query": {
"match": {
"contact.residence.address": "Rocky Road"
}
}
}
工作正常并返回结果,但如果我在bool查询中执行相同的操作,如
GET city/town/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"contact.residence.address": "Rocky Road"
}
}
]
}
}
}
不返回任何结果。这是为什么?????记住其他bool查询,例如
GET city/town/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"store.name": "Hendersons"
}
}
]
}
}
}
干得很好!它只适用于3级深度的任何字段,因此搜索任何术语prop1.prop3.prop3原因是第一次搜索使用
匹配
查询,而另一次搜索使用术语
查询。不同之处在于match
query将analyzer应用于提供正确术语的输入<代码>术语查询不会分析您的输入,而是将其作为单个术语使用。对于像“Hendersons”这样的输入,它可能会给出相同的结果,但对于“Rocky Road”输入,它必须分为两个术语,因此必须使用match
query
GET city/town/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"contact.residence.address": "Rocky Road"
}
}
]
}
}
}
原因是第一次搜索使用
match
query,而另一次搜索使用term
query。不同之处在于match
query将analyzer应用于提供正确术语的输入<代码>术语查询不会分析您的输入,而是将其作为单个术语使用。对于像“Hendersons”这样的输入,它可能会给出相同的结果,但对于“Rocky Road”输入,它必须分为两个术语,因此必须使用match
query
GET city/town/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"contact.residence.address": "Rocky Road"
}
}
]
}
}
}
您可能有
contact.residence.address
字段映射为text
类型。如果是这种情况,那么在第二个查询中将术语
替换为匹配
,将按预期工作。我建议您阅读该部分,为什么术语查询与我的文档不匹配?在正式文档中。您可能有contact.residence.address
字段映射为text
类型。如果是这种情况,那么在第二个查询中将术语
替换为匹配
,将按预期工作。我建议您阅读该部分,为什么术语查询与我的文档不匹配?在官方文件中。工作得很有魅力。非常感谢。工作得很有魅力。非常感谢。