我正在将bool查询用于“must”和“must_not”功能。它可以按预期工作,直到到达3级深的属性为止。例如简单的匹配查询,例如...
GET city/town/_search
{
"query": {
"match": {
"contact.residence.address": "Rocky Road"
}
}
}
工作正常,并返回结果,但是如果我在..这样的 bool(boolean) 查询中执行相同的操作
GET city/town/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"contact.residence.address": "Rocky Road"
}
}
]
}
}
}
返回没有结果。为什么是这样?????请记住其他 bool(boolean) 查询,例如..
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"
}
}
]
}
}
}
关于search - ElasticSearch | boolean 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43216657/