我目前正在努力处理 ElastSearch 查询,目前看起来如下:
...
"query": {
"bool": {
"must_not": [
{
"term": {
"bool-facet.criteria1": {
"value": false
}
}
},
{
"term": {
"bool-facet.criteria2": {
"value": false
}
}
}
]
}
}
...
所以现在当 criteria1 或 criteria2 匹配时,文档将被忽略。查询必须是什么样子,以便只有匹配 criteria1 和 criteria2 的文档才会被忽略?
如果您想要简单的
AND
行为,那么只需在其中嵌套另一个 bool
查询即可:
"query": {
"bool": {
"must_not": [
{
"bool": {
"filter": [
{
"term": {
"bool-facet.criteria1": false
}
},
{
"term": {
"bool-facet.criteria2": false
}
}
]
}
}
]
}
}
请注意,通过使用
filter
(因为这是一个是/否问题,不需要评分,但如果您想要评分,那么您可以使用 must
而不是 filter
),您将获得所需的 AND
行为。这会将问题更改为“不(任何具有 criteria1 == false AND criteria2 == false 的文档)”。
以下安排对我在 5.5.1 中的类似查询有用:
"query": {
"bool": {
"must": [
{
"bool":{
"must_not":{
"term":{
"bool-facet.criteria1": false
}
}
}
},
{
"bool":{
"must_not":{
"term":{
"bool-facet.criteria2": true
}
}
}
}
]
}
}
其他答案对于其他版本可能是正确的,但在 5.5.1 中对我不起作用。
由于无法更新elasticsearch版本,我不得不寻找另一个解决方案。这对我有用:
"query": {
"bool": {
"must_not" : [
{
"query": {
"bool": {
"must": [
{
"term": {
"bool-facet.criteria1": false
}
},
{
"term": {
"bool-facet.criteria2": false
}
}
]
}
}
}
]
}
}
这种行为在
6.5.4
下对我有用:
GET model/_search
{
"query": {
"bool": {
"must_not": [
{
"exists": {
"field": "field1"
}
},
{
"exists": {
"field": "field2"
}
},
{
"exists": {
"field": "field3"
}
}
]
}
}
}
这对我有用:
GET index/_search
{
"query": {
"bool": {
"must_not": [
{
"bool": {
"must": [
{
"term": {
"bool-facet.criteria1": false
}
},
{
"term": {
"bool-facet.criteria2": false
}
}
]
}
}
]
}
}
}