ES常见查询总结
目录
1:查询总数
GET demo_person/_count
{
"query": {
"match_all": {}
}
}
上述用sql表示:
SELECT COUNT(*) FROM demo_person
2:查询所有数据
GET demo_person/_search
{
"query": {
"match_all": {}
}
}
上述用sql表示:
SELECT * FROM demo_person
3:查询指定条数
GET demo_person/_search
{ "size": 20,
"query": {
"match_all": {}
}
}
上述用sql表示:
SELECT * FROM demo_person LIMIT 20
4:根据ID查询
GET /demo_person/_doc/1?pretty
上述用sql表示:
SELECT * FROM demo_person WHERE _id = '1'
5:一个查询字符串搜索
GET /demo_person/_search?q=last_name:Smith
上述用sql表示:
SELECT * FROM demo_person WHERE last_name = 'Smith'
6:match搜索
这是一个 Elasticsearch 查询语句,用于在索引为 demo_person 中查询 last_name 字段包含 “Smith” 的文档,
特点先分词,再拿词去匹配倒排索引
GET /demo_person/_search
{
"query" : {
"match" : {
"last_name" : "Smith"
}
}
}
上述用sql表示:
SELECT * FROM demo_person WHERE last_name ='Smith'
7:term搜索
这是一个 Elasticsearch 查询语句,用于在索引为 demo_person 中查询 last_name 字段精确匹配值为 “Smith” 的文档。term:不分词直接匹配词条
GET /demo_person/_search
{
"query": {
"term": {
"last_name": {
"value": "Smith"
}
}
}
}
上述用sql表示:
SELECT * FROM demo_person WHERE last_name = 'Smith'
8:bool搜索
这是一个 Elasticsearch 查询语句,用于在索引为 demo_person 中查询 last_name 字段包含 “Smith” 且 age 大于等于 30 的文档。
must: 完全匹配条件 相当于sql中的and
should: 至少满足一个条件 相当于sql中的 or
must_not: 文档必须不匹配条件 相当于sql中的!=
GET /demo_person/_search
{
"query": {
"bool": {
"must": [
{"match": {
"last_name": "Smith"
}}
],
"filter": [
{"range": {
"age": {
"gte": 30
}
}}
]
}
}
}
上述用sql表示:
SELECT * FROM demo_person WHERE last_name = 'Smith' AND age >= 30
9:must多条件匹配查询
这是一个 Elasticsearch 查询语句,用于在索引为 demo_person 中查询 last_name 字段包含 “Smith” 且 age 等于 32 的文档。
GET /demo_person/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"last_name": "Smith"
}
},
{
"match": {
"age": 32
}
}
]
}
}
}
上述用sql表示:
SELECT * FROM demo_person WHERE last_name = 'Smith' AND age = 32
10:Should满足一个条件查询
这是一个 Elasticsearch 查询语句,用于在索引为 demo_person 中查询 last_name 字段包含 “Fir” 或 age 等于 32 的文档。
GET /demo_person/_search
{
"query": {
"bool": {
"should": [
{
"match": {
"last_name": "Fir"
}
},
{
"match": {
"age": 32
}
}
]
}
}
}
上述用sql表示:
SELECT * FROM demo_person WHERE last_name = 'Fir' OR age = 32
11: must_not必须不匹配查询
这是一个 Elasticsearch 查询语句,用于在索引为 demo_person 中查询 last_name 字段不包含 “Fir” 且 age 不等于 32 的文档
GET /demo_person/_search
{
"query": {
"bool": {
"must_not": [
{
"match": {
"last_name": "Fir"
}
},
{
"match": {
"age": 32
}
}
]
}
}
}
上述用sql表示:
SELECT * FROM demo_person WHERE last_name != 'Fir' AND age != 32
12:多个字段查询内容
这是一个 Elasticsearch 查询语句,用于在索引为 demo_person 中查询 last_name 和 about 字段包含 “collect” 或 “rock” 的文档。
GET /demo_person/_search
{
"query": {
"multi_match": {
"query": "collect rock",
"fields": ["last_name","about"]
}
}
}
上述用sql表示:
SELECT * FROM demo_person WHERE last_name LIKE '%collect%' OR about LIKE '%collect%' OR last_name LIKE '%rock%' OR about LIKE '%rock%'
13:一个字段查询多个内容
GET /demo_person/_search
{
"query": {
"terms": {
"about": [
"rock",
"hehe"
]
}
}
}
上述用sql表示:
SELECT * FROM demo_person WHERE about IN ('rock', 'hehe')
14:通配符和正则匹配
GET /demo_person/_search
{
"query": {
"bool": {
"filter": [
{
"wildcard":{
"last_name":"*mi*"
}
}]
}
}
}
上述用sql表示:
SELECT * FROM demo_person WHERE last_name LIKE '%mi%'
15:前缀查询
GET /demo_person/_search
{
"query": {
"prefix": {
"last_name": {
"value": "Smi"
}
}
}
}
上述用sql表示:
SELECT * FROM demo_person WHERE last_name LIKE 'Smi%'
16:短语匹配
这是一个 Elasticsearch 查询语句,用于在索引为 demo_person 中查询 about 字段包含短语 “rock climbing” 的文档。
GET /demo_person/_search
{
"query" : {
"match_phrase" : {
"about" : "rock climbing"
}
}
}
上述用sql表示:
SELECT * FROM demo_person WHERE about LIKE '%rock climbing%'
17:范围查询
GET demo_person/_search
{
"query": {
"range": {
"age": {
"gte": 30,
"lt": 35
}
}
}
}
上述用sql表示:
SELECT * FROM demo_person WHERE age >= 30 AND age < 35
18:字段存在查询
GET /demo_person/_search
{
"query": {
"exists": {"field": "age"}
}
}
上述用sql表示:
SELECT * FROM demo_person WHERE age IS NOT NULL
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!