Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 弹性搜索参数存在性_Ruby On Rails_Json_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Ruby On Rails,Json,elasticsearch" /> elasticsearch,Ruby On Rails,Json,elasticsearch" />

Ruby on rails 弹性搜索参数存在性

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

如何构造查询JSON,以便在过滤时检查是否存在外部参数

{"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