我有一个页面,允许用户查询数据集和应用过滤器。它们也可以应用过滤器,而无需查询字符串。要做到这一点,我尝试使用match_all与过滤器,但得到以下错误
"{"error":{"root_cause":[{"type":"parsing_exception",“原因”:“match_all畸形查询,预期的END_OBJECT但找到了FIELD_NAME",”行“:1,"col":26},"type":"parsing_exception",”FIELD_NAME“:”match_all畸形查询,预期END_OBJECT但找到了FIELD_NAME","line":1,“col”:26},“status”: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
]
]
我似乎想不出如何同时使用这两种方法。有什么指示吗?谢谢。
发布于 2019-05-08 06:47:18
您需要将查询包装在类似于以下的bool
查询中:
"query": {
"bool" : {
"must" : {
"match_all": {}
},
"filter": {
"range" : { /* your filter here*/ }
}
}
}
只需将bool
和must
查询包装在match_all
周围,它就会正常工作。
我不知道确切的PHP语法,但应该是这样的:
[
"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
]
]
有关参考,请参阅docs Elasticsearch参考[7.0]查询DSL复合查询,它包含一个示例,如您的示例,将match_all
与过滤器结合在一起。
https://stackoverflow.com/questions/56043164
复制