上一篇文章《ElasticSearch - 索引、映射、文档》
说明
ES中提供了一种强大的检索数据方式,这种检索方式称之为Query DSL,Query DSL是利用Rest API传递JSON格式的请求体(Request Body)数据与ES进行交互,这种方式的丰富查询语法让ES检索变得更强大,更简洁
语法
### _doc可选,查询效果都一样
# GET /索引名/_doc/_search {json格式请求体数据}
# GET /索引名/_search {json格式请求体数据}
查询所有文档记录
### match_all查询文档中所有记录
GET /product/_doc/_search
{
"query": {
"match_all": {}
}
}
term关键词分词查询
### 关键词分词查询 term
GET /product/_doc/_search
{
"query": {
"term": {
"description": {
"value": "blog"
}
}
}
}
【注意】
映射类型说明
- integer: 搜索时不分词
- double: 搜索时不分词
- date: 搜索时不分词
- keyword: 搜索时需要输入全部内容,不分词,就像SQL当中的eq
- text: 中文单字分词(一个字一个字进行分隔),英文单词分词(me、like、you...)
小结:
range关键字范围查询
### 范围查询 range gte ===> 大于等于 lte ===> 小于等于
GET /product/_doc/_search
{
"query": {
"range": {
"price": {
"gte": 0,
"lte": 5
}
}
}
}
prefix关键字前缀查询
### 前缀查询 prefix
GET /product/_doc/_search
{
"query": {
"prefix": {
"title": {
"value": "vin"
}
}
}
}
wildcard关键字通配符查询
### 通配符查询 wildcard
# ?用来匹配一个任意字符
# *用来匹配多个任意字符
GET /product/_doc/_search
{
"query": {
"wildcard": {
"description": {
"value": "*blog"
}
}
}
}
ids关键字多id查询
### 多id查询 ids
GET /product/_doc/_search
{
"query": {
"ids": {
"values": [1,2,3]
}
}
}
fuzzy关键字模糊查询
### 模糊查询 fuzzy
GET /product/_doc/_search
{
"query": {
"fuzzy": {
"description": "blog"
}
}
}
【注意】
fuzzy 模糊查询,最大模糊错误必须在[0,2]之间
- 搜索关键字长度为2不允许存在模糊
- 搜索关键字长度为3-5允许一次模糊
- 搜索关键字长度大于5允许最大两次模糊
bool关键字布尔查询
### 布尔查询 bool
GET /product/_doc/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"price": {
"value": 1.7
}
}
}
]
}
}
}
GET /product/_doc/_search
{
"query": {
"bool": {
"must": [
{
"ids": {
"values": [1,2,3,4,5,6,7]
}
}
]
}
}
}
【注意】
bool可以用来组合多个条件实现复杂查询
- must: 相当于&&同时成立
- should: 相当于||成立一个就行
- must_not: 相当于!非,不能满足任何一个
multi_match关键字多字段查询
### 多字段查询 multi_match
GET /product/_doc/_search
{
"query": {
"multi_match": {
"query": "vinjcent",
"fields": ["title","description"]
}
}
}
【注意】
先根据mapping字段类型分词("title"、"description"),将查询条件分词之后进行查询该字段(中文单字分词、英文单词分词),如果该字段不分词就会将查询条件作为整体进行查询
query_string关键字默认字段查询
### 默认字段查询 query_string
# title为keyword类型,不分词(需要全部输入内容符合)
GET /product/_doc/_search
{
"query": {
"query_string": {
"default_field": "title",
"query": "vinjcent"
}
}
}
# description为text类型,分词(根据部分输入内容)
GET /product/_doc/_search
{
"query": {
"query_string": {
"default_field": "description",
"query": "blog"
}
}
}
【注意】
根据字段的类型,将查询条件进行分词后进行查询
highlight关键字高亮查询
### 高亮查询 highlight
# 例如百度搜索spring
GET /product/_doc/_search
{
"query": {
"query_string": {
"default_field": "description",
"query": "blog"
}
},
"highlight": {
"fields": {
"*": {}
}
}
}
【注意】
可以让符合条件的文档中的关键词高亮,高亮并没有修改原始的文档,只是单独将高亮结果单独拿出来
# 自定义高亮标签tags,开启多个字段高亮require_field_match
GET /product/_doc/_search
{
"query": {
"query_string": {
"default_field": "description",
"query": "blog"
}
},
"highlight": {
"pre_tags": [""],
"post_tags": [""],
"require_field_match": "false",
"fields": {
"*": {}
}
}
}
size关键字条数查询
### 条数查询 size
GET /product/_doc/_search
{
"query": {
"match_all": {}
},
"size": 2
}
【注意】
指定查询结果中返回指定条数目.默认返回值10条
from关键字分页查询
### 分页查询 from size
GET /product/_doc/_search
{
"query": {
"match_all": {}
},
"from": 0,
"size": 2
}
【注意】
用来指定起始返回位置,和size关键字连用可实现分页效果
sort关键字排序
### 排序 sort
GET /product/_doc/_search
{
"query": {
"match_all": {}
},
"from": 0,
"size": 2,
"sort": [
{
"id": {
"order": "desc"
}
}
]
}
【注意】
desc/asc
_source关键字返回指定字段
### 返回指定字段 _source
GET /product/_doc/_search
{
"query": {
"match_all": {}
},
"from": 0,
"size": 2,
"sort": [
{
"id": {
"order": "desc"
}
}
],
"_source": ["id","title","description"]
}
【注意】
是一个数组,在数组中用来指定展示哪些字段