如何构造查询JSON,以便在过滤时检查是否存在外部参数。
{"query": {
"filtered": {
"query": {
"match_all": {}
}}},
"filter": {
"and": {
"filters": [
{
"term": {
"locality_name": params[:locality_name] if params[:locality_name].present?
}
}
]
}
}}:
JSON中的if
子句是查询DSL的无效语法。
答案 0 :(得分:0)
我认为您可以将existFilter
和termFilter
与and
过滤器结合使用。
这将检索locality_name字段存在且locality_name字段值等于您指定值的文档。
"filter" : {
"and" : [
{
"exists" : { "field" : "locality_name" }
},
{
"term" : { "locality_name" : "your_locality_name" }
}
]
}
http://www.elasticsearch.org/guide/reference/query-dsl/exists-filter/
http://www.elasticsearch.org/guide/reference/query-dsl/and-filter/