美文网首页ElastichSearchelasticsearch玩转大数据
四十八、Elasticsearch初识搜索引擎-filter与q

四十八、Elasticsearch初识搜索引擎-filter与q

作者: 编程界的小学生 | 来源:发表于2017-07-10 14:01 被阅读115次

    1、案例

    数据准备:

    PUT /company/employee/1
    {
      "address" : {
        "country": "china",
        "province": "guangdong",
        "city": "guangzhou"
      },
      "name": "jack",
      "age": 27,
      "join_date": "2017-01-01"
    }
    
    PUT /company/employee/2
    {
      "address": {
        "country": "china",
        "province": "jiangsu",
        "city": "nanjing"
      },
      "name": "tom",
      "age": 30,
      "join_date": "2016-01-01"
    }
    
    PUT /company/employee/3
    {
      "address": {
        "country": "china",
        "province": "shanxi",
        "city": "xian"
      },
      "name": "marry",
      "age": 35,
      "join_date": "2015-01-01"
    }
    

    需求:搜索年龄必须大于等于30,同时join_date必须是2016-01-01

    GET /company/employee/_search
    {
      "query": {
        "bool": {
          "must": [
            {
              "match": {
                "join_date": "2016-01-01"
              }
            }
          ],
          "filter": {
            "range": {
              "age": {
                "gte": 30
              }
            }
          }
        }
      }
    }
    

    2、filter与query对比大解密
    fiter,仅仅只是按照搜索条件过滤出需要的数据而已,不计算任何相关度分数,对相关度没有任何影响
    query,会去计算每个document相对于搜索条件的相关度,并按照相关度进行排序

    一般来说,如果你是在进行搜索,需要将最匹配搜索条件的数据先返回,那么就用query,因为他会计算相关度(_score),并按照相关度排序。如果你只是要根据一些条件筛选出一部分数据,不关注其排序,那么就用filter

    3、filter与query性能

    filter,不需要计算相关度分数。不需要按照相关度分数进行排序,同时还有内置的自动cache,最常用filter的数据。
    query,相反,要计算相关度分数,按照分数进行排序,而且无法cache结果

    若有兴趣,欢迎来加入群,【Java初学者学习交流群】:458430385,此群有Java开发人员、UI设计人员和前端工程师。有问必答,共同探讨学习,一起进步!
    欢迎关注我的微信公众号【Java码农社区】,会定时推送各种干货:


    qrcode_for_gh_577b64e73701_258.jpg

    相关文章

      网友评论

        本文标题:四十八、Elasticsearch初识搜索引擎-filter与q

        本文链接:https://www.haomeiwen.com/subject/bpwyhxtx.html