ElasticSearch(八)【过滤查询】
八、过滤查询
上一篇文章《ElasticSearch - 扩展词、停用词配置》
过滤查询,其实准确来说,ES中的查询操作分为2种:查询(query)
和过滤(filter)
。查询即是之前提到的query查询
,它 (查询)默认会计算每个返回文档的得分,然后根据得分排序。而过滤(filter)只会筛选出符合的文档,并不计算得分,而且它可以缓存文档。所以,单从性能考虑,过滤比查询更快。 换句话说,过滤适合在大范围筛选数据,而查询则适合精确匹配数据。一般应用时, 应先使用过滤操作过滤数据,然后使用查询匹配数据
【注意】
- 在执行 filter 和 query 时,先执行 filter 在执行 query
- Elasticsearch 会自动缓存经常使用的过滤器,以加快性能
常见过滤类型
- term:单个关键词
- terms:多个关键词
- range:范围
- exists:存在
- ids:多个id
term类型
GET /product/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"description": {
"value": "blog"
}
}}
],
"filter": [
{
"term":
{
"description": "blog"}
}
]
}
}
}
terms类型
GET /product/_search
{
"query": {
"bool": {
"must": [
{
"match_all": {
}
}
],
"filter": [
{
"terms": {
"description": [
"blog",
"vinjcent"
]
}
}
]
}
}
}
range类型
GET /product/_search
{
"query": {
"bool": {
"must": [
{
"match_all": {
}
}
],
"filter": [
{
"range": {
"price": {
"gte": 0,
"lte": 20
}
}}
]
}
}
}
exists类型,过滤存在指定字段,获取字段不为空的索引记录使用
GET /product/_search
{
"query": {
"bool": {
"must": [
{
"match_all": {
}
}
],
"filter": [
{
"exists": {
# 存在某个字段
"field": "aaa"
}
}
]
}
}
}
ids类型,过滤含有指定字段的索引记录
GET /product/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"description": {
"value": "blog"
}
}
}
],
"filter": [
{
"ids": {
"values": [
"1","2"
]
}
}
]
}
}
}
下一篇文章《ElasticSearch - SpringBoot整合》
还没有评论,来说两句吧...