如何使用 AND & OR 逻辑(AND 中的 OR 逻辑)的组合来定义 DSL 查询?
How to define DSL query with combinations of AND & OR logic(OR logic inside AND)?
我想定义一个 DSL 查询,以在下面的 Lucene 中描述查询:
q = role:(admin OR manager) AND priority:(high OR middle).
我知道我可以使用 should
来指示 OR
逻辑,但是,下面的 DSL 查询:
{
"query": {
"bool": {
"should": [
{
"match": {
"role": "admin"
}
},
{
"match": {
"role": "manager"
}
},
{
"match": {
"priority": "high"
}
},
{
"match": {
"priority": "middle"
}
}
],
"minimum_should_match": "2"
}
}
}
无法实现我所需要的,因为数据
{
"role": [ "admin", "manager"],
"priority": "low"
}
会被认为是有效的,但事实并非如此。
如何修复我的 DSL 查询?我正在使用 ElasticSearch 5.2.2,谢谢!
你需要这样做:
{
"query": {
"bool": {
"filter": [
{
"bool": {
"minimum_should_match": "1",
"should": [
{
"match": {
"role": "admin"
}
},
{
"match": {
"role": "manager"
}
}
]
}
},
{
"bool": {
"minimum_should_match": "1",
"should": [
{
"match": {
"priority": "high"
}
},
{
"match": {
"priority": "middle"
}
}
]
}
}
]
}
}
}
我想定义一个 DSL 查询,以在下面的 Lucene 中描述查询:
q = role:(admin OR manager) AND priority:(high OR middle).
我知道我可以使用 should
来指示 OR
逻辑,但是,下面的 DSL 查询:
{
"query": {
"bool": {
"should": [
{
"match": {
"role": "admin"
}
},
{
"match": {
"role": "manager"
}
},
{
"match": {
"priority": "high"
}
},
{
"match": {
"priority": "middle"
}
}
],
"minimum_should_match": "2"
}
}
}
无法实现我所需要的,因为数据
{
"role": [ "admin", "manager"],
"priority": "low"
}
会被认为是有效的,但事实并非如此。
如何修复我的 DSL 查询?我正在使用 ElasticSearch 5.2.2,谢谢!
你需要这样做:
{
"query": {
"bool": {
"filter": [
{
"bool": {
"minimum_should_match": "1",
"should": [
{
"match": {
"role": "admin"
}
},
{
"match": {
"role": "manager"
}
}
]
}
},
{
"bool": {
"minimum_should_match": "1",
"should": [
{
"match": {
"priority": "high"
}
},
{
"match": {
"priority": "middle"
}
}
]
}
}
]
}
}
}