elasticsearch “弹性搜索”过滤器;字段不存在或字段等于true;,elasticsearch,elasticsearch" /> elasticsearch “弹性搜索”过滤器;字段不存在或字段等于true;,elasticsearch,elasticsearch" />

elasticsearch “弹性搜索”过滤器;字段不存在或字段等于true;

elasticsearch “弹性搜索”过滤器;字段不存在或字段等于true;,elasticsearch,elasticsearch,我有一个以下格式的搜索查询: { "query": { "function_score": { "query": { "bool": { "must": { "simple_query_string": { "query": "*", "fields": [ "field1^10", "fiel

我有一个以下格式的搜索查询:

{
  "query": {
    "function_score": {
      "query": {
        "bool": {
          "must": {
            "simple_query_string": {
              "query": "*",
              "fields": [
                "field1^10",
                "field2^3"
              ]
            }
          },
          "filter": [
            {
              "terms": {
                "field3": [
                  "val1",
                  "val2"
                ]
              }
            },
            {
              "terms": {
                "field4": [
                  "val4"
                ]
              }
            },
            {
              "term": {
                "field5": true
              }
            }
          ]
        }
      },
      "functions": [
        {
          "gauss": {
            "field1": {
              "scale": "31d"
            }
          },
          "weight": 5
        }
      ],
      "score_mode": "sum",
      "boost_mode": "multiply"
    }
  },
  "size": 10
}
现在我想修改
field5
上的过滤器,以便它过滤将field5设置为
true
的值,或者如果它们没有
field5
索引的值。我希望在结果中包含这两种类型,并且只排除那些将
field5
设置为false的类型

我尝试了
必须
应该
过滤器
中的各种组合,但未能使查询正常工作。谢谢你的帮助


我使用的是elasticsearch 6.5.1版。

鉴于您提供的信息

我希望在结果中同时包含这两种类型,并且只希望排除字段5设置为false的类型。

查询应如下所示:

{
  "query": {
    "function_score": {
      "query": {
        "bool": {
          "must": {
            "simple_query_string": {
              "query": "*",
              "fields": [
                "field1^10",
                "field2^3"
              ]
            }
          },
          "must_not": [
            {
              "term": {
                "field5": {
                  "value": false
                }
              }
            }
          ], 
          "filter": [
            {
              "terms": {
                "field3": [
                  "val1",
                  "val2"
                ]
              }
            },
            {
              "terms": {
                "field4": [
                  "val4"
                ]
              }
            }
          ]
        }
      },
      "functions": [
        {
          "gauss": {
            "field1": {
              "scale": "31d"
            }
          },
          "weight": 5
        }
      ],
      "score_mode": "sum",
      "boost_mode": "multiply"
    }
  },
  "size": 10
}

我添加了一个must_not-子句,以排除字段5等于false的所有文档。

考虑到您特别提供的信息

我希望在结果中同时包含这两种类型,并且只希望排除字段5设置为false的类型。

查询应如下所示:

{
  "query": {
    "function_score": {
      "query": {
        "bool": {
          "must": {
            "simple_query_string": {
              "query": "*",
              "fields": [
                "field1^10",
                "field2^3"
              ]
            }
          },
          "must_not": [
            {
              "term": {
                "field5": {
                  "value": false
                }
              }
            }
          ], 
          "filter": [
            {
              "terms": {
                "field3": [
                  "val1",
                  "val2"
                ]
              }
            },
            {
              "terms": {
                "field4": [
                  "val4"
                ]
              }
            }
          ]
        }
      },
      "functions": [
        {
          "gauss": {
            "field1": {
              "scale": "31d"
            }
          },
          "weight": 5
        }
      ],
      "score_mode": "sum",
      "boost_mode": "multiply"
    }
  },
  "size": 10
}
我添加了一个must_not-子句,以排除所有字段5等于false的文档