1. 查询所有
es最多只支持查询1万条数据。
java
# 查询所有
GET /items/_search
{
"query": {
"match_all": {}
}
}
2. 叶子查询
-
- 全文检索
会对结果进行相关度打分。
java
# 检索单个字段
GET /items/_search
{
"query": {
"match": {
"name": "脱脂牛奶"
}
}
}
# 检索多个字段
GET /items/_search
{
"query": {
"multi_match": {
"query": "TEXT",
"fields": ["FIELD1", "FIELD2"]
}
}
}
-
- 精确查询
Term-level query,推荐查找keyword、数值、日期、boolean类型的字段。
java
# 精确查询
GET /items/_search
{
"query": {
"term": {
"isAD": {
"value": "true"
}
}
}
}
java
# range查询
GET /items/_search
{
"query": {
"range": {
"price": {
"gte": 100,
"lte": 200
}
}
}
}
java
# ids所有
GET /items/_search
{
"query": {
"ids": {
"values": ["3070884", "4208291"]
}
}
}
3. 复合查询
filter也是与,但条件不参与算分。
java
GET /items/_search
{
"query": {
"bool": {
"must": [
{"match": {
"name": "手机"
}}
],
"should": [
{"term": {
"brand": {
"value": "vivo"
}
}},
{
"term": {
"brand": {
"value": "小米"
}
}
}
],
"must_not": [
{"range": {
"price": {
"gte": 5000
}
}}
],
"filter": [
{"range": {
"price": {
"lte": 1000
}
}}
]
}
}
}
4. 排序
排序设置后,不会打分。
分页使用from,size。
java
# 排序查询
GET /items/_search
{
"query": {
"match_all": {}
},
"from": 0,
"size": 20,
"sort": [
{
"sold": "desc"
},
{
"price": "asc"
}
]
}
5. 分页
方案:
- search after:分页时需要排序,是从上一次的排序值开始,查询下一页数据。
6. 高亮显示
java
# 排序查询
GET /items/_search
{
"query": {
"match": {
"name": "手机"
}
},
"highlight": {
"fields": {
"name": {
"pre_tags": "<em>",
"post_tags": "</em>"
}
}
}
}