zoukankan      html  css  js  c++  java
  • 【ElasticSearch(八)进阶】filter过滤

    【ElasticSearch(八)进阶】filter过滤


    • 布尔查询中的每个must、should和must not元素都称为查询子句。

      文档满足 must 或 should 子句中的标准的程度有助于文档的相关性得分。分数越高,文档就越符合我们的搜索条件。默认情况下,ElasticSearch返回会按照相关性得分对文档排序。

    • must_not 子句中的条件,影响文档是否包含在结果中。

      filter、must_not 都不影响文档的得分。

    • 还可以显式指定任意过滤器filter,以包含或排除基于结构化数据的文档。


    【例子1】

    查找年龄范围在 18 - 30 ,并且地址中包含 mill 的数据

    range :限制条件的范围

    filter:过滤掉不符合条件的数据,且filter不会影响相关性得分。

    GET /bank/_search
    {
      "query":{
        "bool":{
          "filter":{
            "range":{
              "age":{
                "gte":18,
                "lte": 30
              }
            }
          },
          "must":{
            "match":{
             "address": "mill"
          }}
        }
      }
    }
    

    返回结果:

    {
      "took" : 1,
      "timed_out" : false,
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 1,
          "relation" : "eq"
        },
        "max_score" : 5.4032025,
        "hits" : [
          {
            "_index" : "bank",
            "_type" : "account",
            "_id" : "970",
            "_score" : 5.4032025,
            "_source" : {
              "account_number" : 970,
              "balance" : 19648,
              "firstname" : "Forbes",
              "lastname" : "Wallace",
              "age" : 28,
              "gender" : "M",
              "address" : "990 Mill Road",
              "employer" : "Pheast",
              "email" : "forbeswallace@pheast.com",
              "city" : "Lopezo",
              "state" : "AK"
            }
          }
        ]
      }
    }
    

    【例子2】

    我们可以看到想关心得分是0,filter并没有影响得分,只是筛选出了数据。

    GET /bank/_search
    {
      "query":{
        "bool":{
          "filter":{
            "range":{
              "age":{
                "gte":18,
                "lte": 30
              }
            }
          }
        }
      }
    }
    

    返回的结果是:

    {
      "took" : 1,
      "timed_out" : false,
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 498,
          "relation" : "eq"
        },
        "max_score" : 0.0,
        "hits" : [
          {
            "_index" : "bank",
            "_type" : "account",
            "_id" : "13",
            "_score" : 0.0,
            "_source" : {
              "account_number" : 13,
              "balance" : 32838,
              "firstname" : "Nanette",
              "lastname" : "Bates",
              "age" : 28,
              "gender" : "F",
              "address" : "789 Madison Street",
              "employer" : "Quility",
              "email" : "nanettebates@quility.com",
              "city" : "Nogal",
              "state" : "VA"
            }
          },
          {
            "_index" : "bank",
            "_type" : "account",
            "_id" : "49",
            "_score" : 0.0,
            "_source" : {
              "account_number" : 49,
              "balance" : 29104,
              "firstname" : "Fulton",
              "lastname" : "Holt",
              "age" : 23,
              "gender" : "F",
              "address" : "451 Humboldt Street",
              "employer" : "Anocha",
              "email" : "fultonholt@anocha.com",
              "city" : "Sunriver",
              "state" : "RI"
            }
          },
          。。。
        ]
      }
    }
    
  • 相关阅读:
    sql编码造成的安全问题(基于mysql8.0版本)
    [HY000] [2054] php连接mysql时错误
    jetbrains(phpstrom,webstorm等)破解
    XSS(二)
    XSS(一)
    ctf中rsa攻击方法
    扩展欧几里得算法证明及求乘法逆元
    mac泛洪攻击&arp欺骗(python脚本)
    Flutter 中 实现 单选对话框 和页面中实现单选框
    解决Flutter混合开发时 is not a readable directory 问题
  • 原文地址:https://www.cnblogs.com/musecho/p/15179992.html
Copyright © 2011-2022 走看看