POST /test/topic/_search
{
"query": {
"bool": {
"must": [
{
"multi_match": {
"query": "Predisposition",
"fields": [
"_all"
]
}
},
{
"multi_match": {
"query": "thrombosis",
"fields": [
"_all"
]
}
}
],
"should": [
{
"multi_match": {
"query": "cancer",
"fields": [
"_all"
]
}
}
]
}
}
}
我对上述问题的理解是,它必须与predisposition
AND
thrombosis
OR
cancer
匹配,但我只是得到了少数与predisposition
AND
thrombosis
匹配的文档,我期待很多cancer
个文档但是没有。我错过了什么?
答案 0 :(得分:2)
您正在寻找的方式是,文件必须具有易感性和血栓形成而不管癌症,因为它们在里面必须过滤。
你基本上需要将你的must clause
包裹在这里should clause
{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"multi_match": {
"query": "predisposition",
"fields": "_all"
}
},
{
"multi_match": {
"query": "thrombosis",
"fields": "_all"
}
}
]
}
},
{
"multi_match": {
"query": "cancer",
"fields": "_all"
}
}
]
}
}
}
这将为您提供所需的结果。
答案 1 :(得分:2)
must
需要始终匹配。 should
只会提高分数如果匹配。
此外,还有另一种情况,即没有must
条款,在这种情况下,至少有一个should
必须匹配。
我认为您正在寻找以下内容,而不是:
{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"multi_match": {
"query": "Predisposition",
"fields": [
"_all"
]
}
},
{
"multi_match": {
"query": "thrombosis",
"fields": [
"_all"
]
}
}
]
}
},
{
"bool": {
"must": [
{
"multi_match": {
"query": "cancer",
"fields": [
"_all"
]
}
}
]
}
}
]
}
}
}