首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为非null和非空(“”)创建Elasticsearch curl查询

问为非null和非空(“”)创建Elasticsearch curl查询
EN

Stack Overflow用户
提问于 2013-02-07 14:45:44
回答 13查看 125K关注 0票数 89

如何创建Elasticsearch curl查询来获取非空非空(“”)的字段值,

下面是mysql查询:

代码语言:javascript
复制
select field1 from mytable where field1!=null and field1!="";
EN

回答 13

Stack Overflow用户

发布于 2013-02-07 18:23:48

空值和空字符串都不会对任何值进行索引,在这种情况下,您可以使用exists过滤器

代码语言:javascript
复制
curl -XGET 'http://127.0.0.1:9200/test/test/_search?pretty=1'  -d '
{
   "query" : {
      "constant_score" : {
         "filter" : {
            "exists" : {
               "field" : "myfield"
            }
         }
      }
   }
}
'

或者结合(例如) title字段上的全文搜索:

代码语言:javascript
复制
curl -XGET 'http://127.0.0.1:9200/test/test/_search?pretty=1'  -d '
{
   "query" : {
      "filtered" : {
         "filter" : {
            "exists" : {
               "field" : "myfield"
            }
         },
         "query" : {
            "match" : {
               "title" : "search keywords"
            }
         }
      }
   }
}
'
票数 87
EN

Stack Overflow用户

发布于 2015-07-31 02:55:08

正如@luqmaan在评论中指出的那样,documentation表示filter exists 不会过滤掉空字符串,因为它们被认为是非空值。

因此,除了@DrTech的答案之外,为了有效地过滤掉null和空字符串的值,您应该使用如下内容:

代码语言:javascript
复制
{
    "query" : {
        "constant_score" : {
            "filter" : {
                "bool": {
                    "must": {"exists": {"field": "<your_field_name_here>"}},
                    "must_not": {"term": {"<your_field_name_here>": ""}}
                }
            }
        }
    }
}
票数 38
EN

Stack Overflow用户

发布于 2018-01-22 23:34:31

在elasticsearch 5.6上,我必须使用下面的命令来过滤掉空字符串:

代码语言:javascript
复制
    GET /_search
    {
        "query" : {
            "regexp":{
                "<your_field_name_here>": ".+"
            }
        }
    }  
票数 33
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14745210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档