我正在使用bool查询来确定'必须'并且' must_not'特征。它按预期工作,直到我到达3级深的属性。例如一个简单的匹配查询,例如......
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"
}
}
]
}
}
}
返回NO结果。为什么是这样?????请记住其他bool查询,例如..
GET city/town/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"store.name": "Hendersons"
}
}
]
}
}
}
工作得很好!它仅适用于3级深度的任何字段,因此搜索任何名为prop1.prop3.prop3
的字段答案 0 :(得分:2)
原因是第一次搜索使用match
查询,而另一次使用term
查询。区别在于match
查询将分析器应用于给出正确术语的输入。 term
查询不会分析您的输入并将其用作单个术语。对于诸如" Hendersons"之类的输入,它可能会给出相同的结果。但是对于输入" Rocky Road"它必须分为两个术语,因此您必须使用match
查询
GET city/town/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"contact.residence.address": "Rocky Road"
}
}
]
}
}
}