我知道ES搜索必须,应该而且绝对不能 如果我想要A和B.我可以在必须使用两个条件。或者甚至A和B和C ......,我可以将它们全部放在必须中 编辑: 但我不知道如何实施(A和B)或(C和D),剂量ES可以做到吗?
产地: 但我不知道如何实施(A和B)或C,剂量ES可以做到吗?
答案测试:
POST test/test
{
"name": "I she"
}
以下内容不会搜索任何文章。
POST test/test/_search?pretty
{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [{"match" : { "name" : "I" }}, {"match" : { "name" : "him" }}]
}
},
{
"bool": {
"must": [{"match" : { "name" : "her" }}, {"match" : { "name" : "she" }}]
}
}
]
}
}
}
它将搜索文章
POST test/test/_search?pretty
{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [{"match" : { "name" : "I" }}, {"match" : { "name" : "him" }}]
}
},
{
"bool": {
"must": {"match" : { "name" : "her" }}
}
}
]
}
}
}
答案 0 :(得分:1)
对于复杂的布尔条件,您应该在一个查询中组合必须和应该。例如,如果条件是(A和B)或(C和D),则查询应该类似于
{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [A, B]
}
},
{
"bool": {
"must": [C, D]
}
}
]
}
}
}
答案 1 :(得分:1)
你可以这样做。
GET index/type/_search
{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"term": {
"field1.keyword": {
"value": "A"
}
}
},
{
"term": {
"field2.keyword": {
"value": "B"
}
}
}
]
}
},
{
"bool": {
"must": [
{
"term": {
"field1.keyword": {
"value": "C"
}
}
},
{
"term": {
"field2.keyword": {
"value": "D"
}
}
}
]
}
}
]
}
}
}