Php 使用带过滤器的“全部匹配”
我有一个页面,允许用户查询数据集和应用过滤器。它们还可以应用过滤器,而无需使用字符串进行查询。为此,我尝试将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}” 这是我正在构建并发送给弹性客户端的搜索参数的一个示例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
[
"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
和过滤器的组合