Ruby on rails 弹性搜索参数存在性
如何构造查询JSON,以便在过滤时检查是否存在外部参数Ruby on rails 弹性搜索参数存在性,ruby-on-rails,json,
elasticsearch,Ruby On Rails,Json,
elasticsearch,如何构造查询JSON,以便在过滤时检查是否存在外部参数 {"query": { "filtered": { "query": { "match_all": {} }}}, "filter": { "and": { "filters": [ { "term": { "locality_name": params[:locality_name] if params[:locality_n
{"query": {
"filtered": {
"query": {
"match_all": {}
}}},
"filter": {
"and": {
"filters": [
{
"term": {
"locality_name": params[:locality_name] if params[:locality_name].present?
}
}
]
}
}}:
JSON中的
if
子句对于查询DSL来说是无效语法 我认为您可以将existFilter
和termFilter
与和
这样的过滤器结合起来。
这将检索存在locality_name字段且locality_name字段值等于指定值的文档
"filter" : {
"and" : [
{
"exists" : { "field" : "locality_name" }
},
{
"term" : { "locality_name" : "your_locality_name" }
}
]
}
谢谢,迪维亚。我找到了解决问题的另一种方法。只有当存在
params[:locality\u name]
时,我才将哈希locality\u name
添加到ruby文件中的主query
变量中。我也会试试。参数是存储在文档中,还是在发送到elasticsearch服务器之前由客户端设置的?参数类似于传递到服务器的外部参数如果您在创建查询之前知道参数是否存在,只需在参数不存在时不添加过滤器(使用if(param)){fquery=new filteredQuery();fquery.query=oldquery;fquery.filter=new term filter(“localityname”,params.localityname);}
我遗漏了什么吗?我想你是对的。在我的实现中,如果params[:locality\u name],我会将过滤器
项附加到JSON中。显示?
返回true