Elasticsearch 不止一个 should, must 和 combined
Elasticsearch more than one should, must and combined
我正在学习 Elasticsearch,但我不知道 combine 应该和必须如何。我需要一个字段有一些值,另一个字段有多个值,这种情况可以重复多次。例如,
(Field1 == 1 and (Field2 == "a" or Field2 == "b" )) or
(Field1 == 2 and (Field2 == "c" or Field2 == "d" )) or
(Field1 == 3 and (Field2 == "a" or Field2 == "c" )) .... etc
我尝试了很多方法,但我不能使用 bool,必须在同一级别。例如,
{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{ "term": { "Field1": 1 } },
{
"bool": {
"should": [
{ "terms": { "Field2" : [ "a", "b" ] } }
]
}
}
]
},
"bool": {
"must": [
{ "term": { "Field1": 2 } },
{
"bool": {
"should": [
{ "terms": { "Field2" : [ "c", "d" ] } }
]
}
}
]
},
"bool": {
"must": [
{ "term": { "Field1": 2 } },
{
"bool": {
"should": [
{ "terms": { "Field2" : [ "a", "c" ] } }
]
}
}
]
}
}
]
}
}
}
我真的需要 NEST,但我想从这个开始。
您可以这样做:
{
"query": {
"bool": {
"filter": [
{
"bool": {
"should": [
{
"bool": {
"must": [
{
"term": {
"field1": 1
}
},
{
"terms": {
"field2": [
"a",
"b"
]
}
}
]
}
},
{
"bool": {
"must": [
{
"term": {
"field1": 2
}
},
{
"terms": {
"field2": [
"c",
"d"
]
}
}
]
}
},
{
"bool": {
"must": [
{
"term": {
"field1": 3
}
},
{
"terms": {
"field2": [
"a",
"c"
]
}
}
]
}
}
]
}
}
]
}
}
}
如果你想要 a OR b OR c
其中 a
、b
、c
代表任何类型的查询,那么这在弹性查询中表示为:
{
"bool": {
"should": [
{
a
},
{
b
},
{
c
}
]
}
}
用确切的查询替换 a
、b
、c
。
我正在学习 Elasticsearch,但我不知道 combine 应该和必须如何。我需要一个字段有一些值,另一个字段有多个值,这种情况可以重复多次。例如,
(Field1 == 1 and (Field2 == "a" or Field2 == "b" )) or
(Field1 == 2 and (Field2 == "c" or Field2 == "d" )) or
(Field1 == 3 and (Field2 == "a" or Field2 == "c" )) .... etc
我尝试了很多方法,但我不能使用 bool,必须在同一级别。例如,
{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{ "term": { "Field1": 1 } },
{
"bool": {
"should": [
{ "terms": { "Field2" : [ "a", "b" ] } }
]
}
}
]
},
"bool": {
"must": [
{ "term": { "Field1": 2 } },
{
"bool": {
"should": [
{ "terms": { "Field2" : [ "c", "d" ] } }
]
}
}
]
},
"bool": {
"must": [
{ "term": { "Field1": 2 } },
{
"bool": {
"should": [
{ "terms": { "Field2" : [ "a", "c" ] } }
]
}
}
]
}
}
]
}
}
}
我真的需要 NEST,但我想从这个开始。
您可以这样做:
{
"query": {
"bool": {
"filter": [
{
"bool": {
"should": [
{
"bool": {
"must": [
{
"term": {
"field1": 1
}
},
{
"terms": {
"field2": [
"a",
"b"
]
}
}
]
}
},
{
"bool": {
"must": [
{
"term": {
"field1": 2
}
},
{
"terms": {
"field2": [
"c",
"d"
]
}
}
]
}
},
{
"bool": {
"must": [
{
"term": {
"field1": 3
}
},
{
"terms": {
"field2": [
"a",
"c"
]
}
}
]
}
}
]
}
}
]
}
}
}
如果你想要 a OR b OR c
其中 a
、b
、c
代表任何类型的查询,那么这在弹性查询中表示为:
{
"bool": {
"should": [
{
a
},
{
b
},
{
c
}
]
}
}
用确切的查询替换 a
、b
、c
。