结构化查询 Query DSL
多表现形式的查询语言。在一个简单的json接口中使用结构化查询来展现lucene绝大多数能力。查询更加灵活,精准,易读。
query
参数match_all
匹配所有
get /_search
{ "query": YOUR_QUERY_HERE }
get /_search
{ "query":{
"match_all": {}
}
}
get /_search
{
"query":{
"match": {
"filed": "value"
}
}
}
合并多子句
叶子子句:(leaf clauses)
match等
可以用于查询字符串与一个字段(或多个字段)进行比较复合子句:(compound)用以合并其他子句
bool
参数 说明 must 一样 must_not 不一样 should 多个条件中有一个 匹配
{
"bool": {
"must": { "match": {"name": "weixiao"}}
"must_not": { "match": {"name": "lf"}}
"should": { "match": {"name": "xi"}}
}
}
复合子句可以层层嵌套
过滤/查询
字段 | 说明 | 列子 |
---|---|---|
term | 过滤精准匹配,string、date、boolean | {“term”: {“name”: “weixiao”}} {“trem”: {“date”: “2022-01-01”}} |
terms | 精准过滤多个匹配 | {“terms”:{ “name”: [“weixiao”,“lf”,“xx” ]}} |
range | 范围过滤 | {“range” : { “age”: { “gte”: 20 , “lt”: 30 }}} |
exists 、 missing | 查找文档中是否 包含、不包含 某个字段 | { “exists”:{ “field”: { “value” }}} |
bool | 过滤 boolean 判断 | 看上面 |
match_all | 查询所有,所有字段 _score 都为1 | |
match | 标准查询,全文本、模糊查询都用得到 | |
multi_match | 做多字段搜索 | { “multi_match”: { “query”: “value”, “fields”: [“name”,“remark”] } } |
get /_search
{ "query":{
{
"filtered": {
"query": {"match": {"age": 30 }},
"filter": {"term": {"name": "weixiao"}}
}
}
}}
查询+过滤 。 查询出年龄30岁,名字不是 weixao的数据。
排序
sort
参数 es默认是倒序,排序对性能有一定的影响
get /_search
{
"query":{},
"sort": {"date": {"order": "desc"}}
}
date 排序相等时,用
_score
排序
get /_search
{
"query":{},
"sort": [
{"date": {"order": "desc"}}
{"_score": {"order": "desc"}}
]
}