我正在使用布尔查询来表示"必须"和"must_not"功能。它按预期工作,直到我到达 3 层深的房产。例如,简单的匹配查询,例如...
GET city/town/_search
{
"query": {
"match": {
"contact.residence.address": "Rocky Road"
}
}
}
工作正常并返回结果,但是如果我在布尔查询中执行相同的操作,例如..
GET city/town/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"contact.residence.address": "Rocky Road"
}
}
]
}
}
}
返回"无结果"。这是为什么呢?????请记住其他布尔查询,例如..
GET city/town/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"store.name": "Hendersons"
}
}
]
}
}
}
工作就好!它仅适用于任何 3 级深度的字段,因此搜索任何 prop1.prop3.prop3 的术语
原因是第一个搜索使用match
查询,而另一个搜索使用term
查询。不同之处在于match
查询将分析器应用于提供正确术语的输入。 term
查询不会分析您的输入,而是将其用作单个字词。对于像"Hendersons"这样的输入,它可能给出相同的结果,但对于输入"Rocky Road",它必须拆分为两个术语,因此您必须使用match
查询
GET city/town/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"contact.residence.address": "Rocky Road"
}
}
]
}
}
}