zoukankan      html  css  js  c++  java
  • ElasticSearch教程——filter与query对比(转学习使用)

    一、数据准备

    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_data必须是2016-01-01

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

    结果:

    {
      "took": 103,
      "timed_out": false,
      "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
      },
      "hits": {
        "total": 1,
        "max_score": 1,
        "hits": [
          {
            "_index": "company",
            "_type": "employee",
            "_id": "2",
            "_score": 1,
            "_source": {
              "address": {
                "country": "china",
                "province": "jiangsu",
                "city": "nanjing"
              },
              "name": "tom",
              "age": 30,
              "join_date": "2016-01-01"
            }
          }
        ]
      }
    }

    可以看出Filter同样也能起到赛选的作用

    三、Filter与Query对比

    Filter,仅仅只是按照搜索条件过滤出需要的数据而已,不计算任何相关度分数,对相关度没有任何影响;

    Query,会去计算每个document相对于搜索条件的相关度,并按照相关度进行排序;

    一般来说,如果你是在进行搜索,需要将最匹配搜索条件的数据先返回,那么用Query;如果你只是要根据一些条件筛选出一部分数据,不关注其排序,那么用Filter;

    除非是你的这些搜索条件,你希望越符合这些搜索条件的document越排在前面返回,那么这些搜索条件要放在query中;如果你不希望一些搜索条件来影响你的document排序,那么就放在filter中即可;

    四、Filter与Query性能对比

    Filter,不需要计算相关度分数,不需要按照相关度分数进行排序,同时还有内置的自动cache最常使用Filter的数据

    Query,相反,要计算相关度分数,按照分数进行排序,而且无法cache结果。

  • 相关阅读:
    学习之Struts2框架实现原理----个人理解
    The import java.util cannot be resolved The import javax.servlet cannot be resolved
    谈谈HashSet的存储原理
    RabbitMQ的问题
    剑指Offer:合并列表(25)
    剑指Offer:反转列表(24)
    剑指Offer:链表中倒数第 K 个结点(22)
    剑指Offer:调整数组顺序使奇数位于偶数前面(21)
    剑指Offer:机器人的运动范围(13)
    剑指Offer:变态跳台阶(10.4)
  • 原文地址:https://www.cnblogs.com/yfb918/p/10718174.html
Copyright © 2011-2022 走看看