赞
踩
ES中的查询操作分为2种: 查询(query)和过滤(filter)。查询即是之前提到的query查询,它 (查询)默认会计算每个返回文档的得分,然后根据得分排序。而过滤(filter)只会筛选出符合的文档,并不计算 得分,且它可以缓存文档 。所以,单从性能考虑,过滤比查询更快。
过滤适合在大范围筛选数据,而查询则适合精确匹配数据。一般应用时, 应先使用过滤操作过滤数据, 然后使用查询匹配数据。
在执行filter和query时,先执行filter在执行query
Elasticsearch会自动缓存经常使用的过滤器,以加快性能。
GET /ems/emp/_search { "query": { "bool": { "must": [ {"match_all": {}} ], "filter": { "range": { "age": { "gte": 10 } } } } } }
GET /ems/emp/_search { "query": { "bool": { "must": [ {"term": { "name": { "value": "小黑" } }} ], "filter": { "term": { "content":"框架" } } } } }
GET /ems/emp/_search { "query": { "bool": { "must": [ {"term": { "name": { "value": "小黑" } }} ], "filter": { "terms": { "content":[ "框架", "spring" ] } } } } }
GET /ems/emp/_search { "query": { "bool": { "must": [ {"term": { "name": { "value": "小黑" } }} ], "filter": { "range": { "age": { "gte": 7, "lte": 25 } } } } } }
GET /ems/emp/_search { "query": { "bool": { "must": [ {"term": { "name": { "value": "小黑" } }} ], "filter": { "exists": { "field":"age" } } } } }
过滤含有指定字段的索引记录
GET /ems/emp/_search { "query": { "bool": { "must": [ {"term": { "name": { "value": "小黑" } }} ], "filter": { "ids": { "values": ["dQZIFHcB7sSdNbu_KMhO","dAZIFHcB7sSdNbu_KMhO"] } } } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。