elasticsearch,search,Php,elasticsearch,Search" /> elasticsearch,search,Php,elasticsearch,Search" />

Php 使用带过滤器的“全部匹配”

Php 使用带过滤器的“全部匹配”,php,elasticsearch,search,Php,elasticsearch,Search,我有一个页面,允许用户查询数据集和应用过滤器。它们还可以应用过滤器,而无需使用字符串进行查询。为此,我尝试将match_all与过滤器一起使用,但出现以下错误 “{”错误“:{”根本原因“:[{”类型“:”解析异常“,”原因“:”[match_all] 格式错误的查询,应为[END\u OBJECT],但找到 [FIELD_NAME],“line”:1,“col”:26}],“type”:“parsing_exception”,“reason”:“[match_all] 格式错误的查询,应为[E

我有一个页面,允许用户查询数据集和应用过滤器。它们还可以应用过滤器,而无需使用字符串进行查询。为此,我尝试将match_all与过滤器一起使用,但出现以下错误

“{”错误“:{”根本原因“:[{”类型“:”解析异常“,”原因“:”[match_all] 格式错误的查询,应为[END\u OBJECT],但找到 [FIELD_NAME],“line”:1,“col”:26}],“type”:“parsing_exception”,“reason”:“[match_all] 格式错误的查询,应为[END\u OBJECT],但找到 [字段名称],“行”:1,“列”:26},“状态”:400}”

这是我正在构建并发送给弹性客户端的搜索参数的一个示例

[
  "type" => "events"
  "index" => "events"
  "body" => [
    "query" => [
      "match_all" => {}
      "bool" => [
        "filter" => [
          "range" => [
            "start_date.date" => [
              "gte" => "01/05/2019"
              "lte" => "05/2019"
              "format" => "dd/MM/yyyy||MM/yyyy"
            ]
          ]
        ]
      ]
    ]
    "from" => 0
    "size" => 30
  ]
]

我似乎不知道如何同时使用它们。有什么建议吗?谢谢。

您需要将查询包装在
bool
查询中,如下所示:

"query": {
    "bool" : {
        "must" : {
        "match_all": {}
        },
        "filter": {
        "range" : { /* your filter here*/ }
        }
    }
}
[
  "type" => "events"
  "index" => "events"
  "body" => [
    "query" => [
      "bool" => [
        "must" => [ "match_all" => {}]
        "filter" => [
          "range" => [
            "start_date.date" => [
              "gte" => "01/05/2019"
              "lte" => "05/2019"
              "format" => "dd/MM/yyyy||MM/yyyy"
            ]
          ]
        ]
      ]
    ]
    "from" => 0
    "size" => 30
  ]
]
只需将
bool
must
查询包装在
match\u all
周围,就可以了

我不知道确切的PHP语法,但应该是这样的:

"query": {
    "bool" : {
        "must" : {
        "match_all": {}
        },
        "filter": {
        "range" : { /* your filter here*/ }
        }
    }
}
[
  "type" => "events"
  "index" => "events"
  "body" => [
    "query" => [
      "bool" => [
        "must" => [ "match_all" => {}]
        "filter" => [
          "range" => [
            "start_date.date" => [
              "gte" => "01/05/2019"
              "lte" => "05/2019"
              "format" => "dd/MM/yyyy||MM/yyyy"
            ]
          ]
        ]
      ]
    ]
    "from" => 0
    "size" => 30
  ]
]
如需参考,请参阅文档,其中包含一个与您类似的示例,其中包含了
match\u all
和过滤器的组合