首页  

elasticsearch query 和 filter 的区别     所属分类 elasticsearch 浏览量 1059
query 和 filter ,都可以写查询条件,语法类似
query 上下文的条件用来给文档打分,匹配越好 _score 越高 ,结果集按照 _score 由高到低排序
Query结果不会缓存

filter 的条件只产生两种结果 ,符合与不符合  ,_score属性值都为0
Filter结果会缓存

只有几个文档匹配的query查询 可能会比跨越数百万个文档的 filter 表现得更好
但是一般来说,fiter性能优于query查询

filter过滤机制
bitset  文档匹配为1,否则为0
用相同的filter执行查询将重用此信息
添加或更新文档时,bitset也会更新

ebay 的 ES 使用经验
Use filter context instead of query context if possible.

filter快在两个方面
1 结果缓存
2 不计算分值


{
  "query": { 
    "bool": { 
      "must": [
        { "match": { "title":   "Search"        }}, 
        { "match": { "content": "Elasticsearch" }}  
      ],
      "filter": [ 
        { "term":  { "status": "published" }}, 
        { "range": { "publish_date": { "gte": "2015-01-01" }}} 
      ]
    }
  }
}


{
    "query": {
        "bool": {
            "filter": [
                {"term": {"type": "article"}},
                {"term": {"title": "java"}},
                {"term": {"category": "java"}},
                {"match": {"content": "架构师"}},
                {"range": {"view_count": {"lte":900,"gte":200}}}
            ]
        }
    }
}

{
  "query": { 
    "bool": { 
      "must": [
        { "match": { "title":   "java"}}, 
        { "match": { "content": "架构师" }}  
      ],
      "filter": [ 
        { "term":  { "type": "article" }}, 
        { "range": { "view_count": { "gte": 50}}} 
      ]
    }
  }
}

上一篇     下一篇
elasticsearch profile 使用简介

Elasticsearch聚合分析简介

elasticsearch 查询 DSL 指定分词器

doc_values和fielddata

Elasticsearch zen discovery

elasticsearch索引原理