Elasticsearch 查询过滤器组合问题

Elasticsearch query filter combination issue

我试图理解为什么下面的 elasticsearch 查询不起作用。

编辑:

查询中提到的字段来自不同的索引。例如过滤器有分类字段,它与查询字符串中提到的字段位于不同的索引中。

过滤器查询的预期是,当用户专门搜索分类字段(即机密或受保护)时,将显示值。否则,如果用户从不同的索引中搜索任何其他字段,例如 firstname 或 person,则不应考虑应用任何过滤器,因为 firstname 或 person 不是过滤器的一部分

{
    "query": {
        "bool": {
                    "filter": {
                        "terms": {
                            "classification": [
                                "secret",
                                "protected"
                            ]
                        }
            },
            "must": {
                "query_string": {
                    "query": "*john*",
                    "fields": [
                        "classification",
                        "firstname",
                        "releasability",
                        "person"
                    ]
                }
            }
        }
    }
}

预期的结果是 john in the field person 返回。这在上面的代码中没有应用过滤器时有效

{
    "query": {
     
                    

                "query_string": {
                   "query": "*john*",
                    "fields": [
                        "classification",
                        "firstname",
                        "releasability",
                        "person"
                    ]
                }
            
        
    }
}

过滤器的目的只是在所述字段包含提到的值时过滤记录,否则它应该适用于所有值。

为什么它不生成 john 的结果而只生成分类值的结果?

添加带有示例索引数据和搜索查询的工作示例。

要了解有关 Bool 查询的更多信息,请参阅这位官方 documentation

索引数据: my_index index

中的索引数据
{
    "name":"John",
    "title":"b"
}
{
    "name":"Johns",
    "title":"a"
}

索引数据在my_index1索引

{
    "classification":"protected"
}
{
    "classification":"secret"
}

搜索查询:

POST http://localhost:9200/_search

{
  "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "filter": [
              {
                "terms": {
                  "classification": [
                    "secret",
                    "protected"
                  ]
                }
              }
            ]
          }
        },
        {
          "bool": {
            "must": [
              {
                "query_string": {
                  "query": "*john*",
                  "fields": [
                    "name",
                    "title"
                  ]
                }
              }
            ]
          }
        }
      ]
    }
  }
}

搜索结果:

 "hits": [
      {
        "_index": "my_index",
        "_type": "_doc",
        "_id": "1",
        "_score": 1.0,
        "_source": {
          "name": "John",
          "title": "b"
        }
      },
      {
        "_index": "my_index",
        "_type": "_doc",
        "_id": "2",
        "_score": 1.0,
        "_source": {
          "name": "Johns",
          "title": "a"
        }
      },
      {
        "_index": "my_index1",
        "_type": "_doc",
        "_id": "1",
        "_score": 0.0,
        "_source": {
          "classification": "secret"
        }
      },
      {
        "_index": "my_index1",
        "_type": "_doc",
        "_id": "2",
        "_score": 0.0,
        "_source": {
          "classification": "protected"
        }
      }
    ]