您的位置:首页 > 产品设计 > UI/UE

ElasticSearch实战之Filter Query过滤查询(六)

2019-04-12 10:25 507 查看
版权声明:本文为百知JAVAEE小陈原创文章,未经博主允许不得转载!!! https://blog.csdn.net/cx521600/article/details/89226946

Filter Query(过滤查询)

1.1 过滤查询

其实准确来说,ES中的查询操作分为2种:

查询(query)
过滤(filter)
查询即是之前提到的query查询,它 (查询)默认会计算每个返回文档的得分,然后根据得分排序
而过滤(filter)只会筛选出符合的文档,并不计算 得分,且它可以缓存文档 。所以,单从性能考虑,过滤比查询更快

换句话说,

过滤适合在大范围筛选数据,而查询则适合精确匹配数据。一般应用时, 应先使用过滤操作过滤数据, 然后使用查询匹配数据

1.2 过滤语法

GET /ems/emp/_search
{
"query": {
"bool": {
"must": [
{"match_all": {}}
],
"filter": {
"range": {
"age": {
"gte": 10
}
}
}
}
}
}

NOTE:

在执行filter和query时,先执行filter在执行query

NOTE:

Elasticsearch会自动缓存经常使用的过滤器,以加快性能。

1.3 常见的过滤器类型

term 、 terms Filter

GET /ems/emp/_search   # 使用term过滤
{
"query": {
"bool": {
"must": [
{"term": {
"name": {
"value": "小黑"
}
}}
],
"filter": {
"term": {
"content":"框架"
}
}
}
}
}

GET /dangdang/book/_search  #使用terms过滤
{
"query": {
"bool": {
"must": [
{"term": {
"name": {
"value": "中国"
}
}}
],
"filter": {
"terms": {
"content":[
"科技",
"声音"
]
}
}
}
}
}

ranage filter
范围过滤器

GET /ems/emp/_search
{
"query": {
"bool": {
"must": [
{"term": {
"name": {
"value": "中国"
}
}}
],
"filter": {
"range": {
"age": {
"gte": 7,
"lte": 20
}
}
}
}
}
}

exists filter
过滤存在指定字段,获取字段不为空的索引记录使用

GET /ems/emp/_search
{
"query": {
"bool": {
"must": [
{"term": {
"name": {
"value": "中国"
}
}}
],
"filter": {
"exists": {
"field":"aaa"
}
}
}
}
}

ids filter
过滤含有指定字段的索引记录

GET /ems/emp/_search
{
"query": {
"bool": {
"must": [
{"term": {
"name": {
"value": "中国"
}
}}
],
"filter": {
"ids": {
"values": ["1","2","3"]
}
}
}
}
}

NOTE: 更多内容请参考Elas
1b5d8
tic Search官方文档:
https://www.elastic.co/

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: