欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

es查询语法

程序员文章站 2022-07-06 15:47:41
...

两种方式:发送HTTP GET请求进行检索、使用ES查询表达式 (DSL) 检索。

curl -XGET /megacorp/employee/1

如:

(1)、计算集群中文档的数量,我们可以用这个:

curl -XGET 'http://localhost:9200/_count?pretty' -d '
{
    "query": {
        "match_all": {}
    }
}复制代码

ES将返回一个HTTP状态码(例如:200 OK`)和(除`HEAD`请求)一个JSON 格式的返回值。JSON 体如下:

{
    "count" : 0,
    "_shards" : {
        "total" : 5,
        "successful" : 5,
        "failed" : 0
    }
}复制代码

 

第二种方式即使用使用ES查询表达式 (DSL) 检索:将请求参数按照ES约定的格式构造为一个JSON进行请求。

常用的查询:

查询方式

含义

使用方法

备注

term过滤

term主要用于精确匹配哪些值,比如数字,日期,布尔值或 not_analyzed 的字符串。

not_analyzed 的字符串:未经切词的文本数据类型。

{ 
  "query": { 
    "term": { 
      "title": "内蒙古" 
    } 
 } 
}
 

terms过滤

terms 跟 term 有点类似,但 terms 允许指定多个匹配条件。 如果某个字段指定了多个值,那么document需要一起去做匹配。

{
  "query": {
    "terms": {
      "title": [
        "内蒙古",
        "黑龙江"
      ]
    }
  }
}
 

range

range过滤允许我们按照指定范围查找一批数据。

{
"query":{
  "range": {
    "pubTime": {
      "gt": "2017-06-25",
      "lt": "2017-07-01"
    	}
  	}
	}
}

范围操作符包含:

关键字

含义

gt

大于

gte

大于等于

lt

小于

lte

小于等于

exists和missing

exists 和 missing 过滤可以用于查找文档中是否包含指定字段或没有某个字段,类似于SQL语句中的IS_NULL条件。

这两个过滤只是针对已经查出一批数据来,但是想区分出某个字段是否存在的时候使用。

{
    "exists":{
        "field":"title"
    }
}
 

bool过滤

bool 过滤可以用来合并多个过滤条件查询结果的布尔逻辑,它包含一下操作符:

must :: 多个查询条件的完全匹配,相当于 and。

must_not :: 多个查询条件的相反匹配,相当于 not。

should :: 至少有一个查询条件匹配, 相当于 or。

这些参数可以分别继承一个过滤条件或者一个过滤条件的数组

{
    "bool":{
        "must":{
            "term":{
                "folder":"inbox"
            }
        },
        "must_not":{
            "term":{
                "tag":"spam"
            }
        },
        "should":[
            {
                "term":{
                    "starred":true
                }
            },
            {
                "term":{
                    "unread":true
                }
            }
        ]
    }
}