ES常见查询总结

目录

  • 1:查询总数
  • 2:查询所有数据
  • 3:查询指定条数
  • 4:根据ID查询
  • 5:一个查询字符串搜索
  • 6:match搜索
  • 7:term搜索
  • 8:bool搜索
  • 9:must多条件匹配查询
  • 10:Should满足一个条件查询
  • 11: must_not必须不匹配查询
  • 12:多个字段查询内容
  • 13:一个字段查询多个内容
  • 14:通配符和正则匹配
  • 15:前缀查询
  • 16:短语匹配
  • 17:范围查询
  • 18:字段存在查询

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