zoukankan      html  css  js  c++  java
  • 第三百六十六节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的bool组合查询

    第三百六十六节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的bool组合查询

    bool查询说明

    filter:[],字段的过滤,不参与打分
    must:[],如果有多个查询,都必须满足【并且】
    should:[],如果有多个查询,满足一个或者多个都匹配【或者】
    must_not:[],相反查询词一个都不满足的就匹配【取反,非】

    # bool查询
    # 老版本的filtered已经被bool替换
    #用 bool 包括 must should must_not filter 来完成
    #格式如下:
    
    #bool:{
    #     "filter":[],      字段的过滤,不参与打分
    #     "must":[],        如果有多个查询,都必须满足【并且】
    #     "should":[],      如果有多个查询,满足一个或者多个都匹配【或者】
    #     "must_not":[],    相反查询词一个都不满足的就匹配【取反,非】
    #}

    建立测试数据

    #建立测试数据
    POST jobbole/job/_bulk
    {"index":{"_id":1}}
    {"salary":10,"title":"python"}
    {"index":{"_id":2}}
    {"salary":20,"title":"Scrapy"}
    {"index":{"_id":3}}
    {"salary":30,"title":"Django"}
    {"index":{"_id":4}}
    {"salary":40,"title":"Elasticsearch"}

    bool组合查询——最简单的filter过滤查询之term查询,相当于等于

    过滤查询到salary字段等于20的数据

    可以看出执行两个两个步骤,先查到所有数据,然后在查到的所有数据过滤查询到salary字段等于20的数据

    # bool查询
    # 老版本的filtered已经被bool替换
    #用 bool 包括 must should must_not filter 来完成
    #格式如下:
    
    #bool:{
    #     "filter":[],      字段的过滤,不参与打分
    #     "must":[],        如果有多个查询,都必须满足
    #     "should":[],      如果有多个查询,满足一个或者多个都匹配
    #     "must_not":[],    相反查询词一个都不满足的就匹配
    #}
    
    
    
    #简单过滤查询
    #最简单的filter过滤查询
    #如果我们要查salary字段等于20的数据
    GET jobbole/job/_search
    {
      "query": {
        "bool": {                   #bool组合查询
          "must":{                  #如果有多个查询词,都必须满足
            "match_all":{}          #查询所有字段
          },
          "filter": {               #filter过滤
            "term": {               #term查询,不会将我们的搜索词进行分词,将搜索词完全匹配的查询
              "salary": 20          #查询salary字段值为20
            }
          }
        }
      }
    }
    
    
    
    #简单过滤查询
    #最简单的filter过滤查询
    #如果我们要查salary字段等于20的数据
    GET jobbole/job/_search
    {
      "query": {
        "bool": {
          "must":{
            "match_all":{}
          },
          "filter": {
            "term": {
              "salary": 20
            }
          }
        }
      }
    }

     

    bool组合查询——最简单的filter过滤查询之terms查询,相当于或

    过滤查询到salary字段等于10或20的数据

    # bool查询
    # 老版本的filtered已经被bool替换
    #用 bool 包括 must should must_not filter 来完成
    #格式如下:
    
    #bool:{
    #     "filter":[],      字段的过滤,不参与打分
    #     "must":[],        如果有多个查询,都必须满足
    #     "should":[],      如果有多个查询,满足一个或者多个都匹配
    #     "must_not":[],    相反查询词一个都不满足的就匹配
    #}
    
    
    
    
    #简单过滤查询
    #最简单的filter过滤查询
    #如果我们要查salary字段等于20的数据
    #过滤salary字段值为10或者20的数据
    GET jobbole/job/_search
    {
      "query": {
        "bool": {
          "must":{
            "match_all":{}
          },
          "filter": {
            "terms": {
              "salary":[10,20]
            }
          }
        }
      }
    }

    注意:filter过滤里也可以用其他基本查询的

    _analyze测试查看分词器解析的结果
    analyzer设置分词器类型ik_max_word精细化分词,ik_smart非精细化分词
    text设置词

    #_analyze测试查看分词器解析的结果
    #analyzer设置分词器类型ik_max_word精细化分词,ik_smart非精细化分词
    #text设置词
    GET _analyze
    {
      "analyzer": "ik_max_word",
      "text": "Python网络开发工程师"
    }
    
    GET _analyze
    {
      "analyzer": "ik_smart",
      "text": "Python网络开发工程师"
    }

    bool组合查询——组合复杂查询1
    查询salary字段等于20或者title字段等于python、salary字段不等于30、并且salary字段不等于10的数据

    # bool查询
    # 老版本的filtered已经被bool替换
    #用 bool 包括 must should must_not filter 来完成
    #格式如下:
    
    #bool:{
    #     "filter":[],      字段的过滤,不参与打分
    #     "must":[],        如果有多个查询,都必须满足【并且】
    #     "should":[],      如果有多个查询,满足一个或者多个都匹配【或者】
    #     "must_not":[],    相反查询词一个都不满足的就匹配【取反,非】
    #}
    
    # 查询salary字段等于20或者title字段等于python、salary字段不等于30、并且salary字段不等于10的数据
    GET jobbole/job/_search
    {
      "query": {
        "bool": {
          "should": [
            {"term":{"salary":20}},
            {"term":{"title":"python"}}
          ],
          "must_not": [
            {"term": {"salary":30}},
            {"term": {"salary":10}}]
        }
      }
    }

    bool组合查询——组合复杂查询2
    查询salary字段等于20或者title字段等于python、salary字段不等于30、并且salary字段不等于10的数据

    # bool查询
    # 老版本的filtered已经被bool替换
    #用 bool 包括 must should must_not filter 来完成
    #格式如下:
    
    #bool:{
    #     "filter":[],      字段的过滤,不参与打分
    #     "must":[],        如果有多个查询,都必须满足【并且】
    #     "should":[],      如果有多个查询,满足一个或者多个都匹配【或者】
    #     "must_not":[],    相反查询词一个都不满足的就匹配【取反,非】
    #}
    
    # 查询title字段等于python、或者、(title字段等于elasticsearch并且salary等于30)的数据
    GET jobbole/job/_search
    {
      "query": {
        "bool": {
          "should":[
            {"term":{"title":"python"}},
            {"bool": {
              "must": [
                {"term": {"title":"elasticsearch"}},
                {"term":{"salary":30}}
              ]
            }}
          ]
        }
      }
    }

    bool组合查询——过滤空和非空

    #建立数据
    POST bbole/jo/_bulk
    {"index":{"_id":"1"}}
    {"tags":["search"]}
    {"index":{"_id":"2"}}
    {"tags":["search","python"]}
    {"index":{"_id":"3"}}
    {"other_field":["some data"]}
    {"index":{"_id":"4"}}
    {"tags":null}
    {"index":{"_id":"1"}}
    {"tags":["search",null]}

    处理null空值的方法

    获取tags字段,值不为空并且值不为null的数据

    # bool查询
    # 老版本的filtered已经被bool替换
    #用 bool 包括 must should must_not filter 来完成
    #格式如下:
    
    #bool:{
    #     "filter":[],      字段的过滤,不参与打分
    #     "must":[],        如果有多个查询,都必须满足【并且】
    #     "should":[],      如果有多个查询,满足一个或者多个都匹配【或者】
    #     "must_not":[],    相反查询词一个都不满足的就匹配【取反,非】
    #}
    
    
    #处理null空值的方法
    #获取tags字段,值不为空并且值不为null的数据
    GET bbole/jo/_search
    {
      "query": {
        "bool": {
          "filter": {
            "exists": {
              "field": "tags"
            }
          }
        }
      }
    }

    获取tags字段值为空或者为null的数据,如果数据没有tags字段也会获取

    # bool查询
    # 老版本的filtered已经被bool替换
    #用 bool 包括 must should must_not filter 来完成
    #格式如下:
    
    #bool:{
    #     "filter":[],      字段的过滤,不参与打分
    #     "must":[],        如果有多个查询,都必须满足【并且】
    #     "should":[],      如果有多个查询,满足一个或者多个都匹配【或者】
    #     "must_not":[],    相反查询词一个都不满足的就匹配【取反,非】
    #}
    
    
    #获取tags字段值为空或者为null的数据,如果数据没有tags字段也会获取
    GET bbole/jo/_search
    {
      "query": {
        "bool": {
          "must_not": {
            "exists": {
              "field": "tags"
            }
          }
        }
      }
    }
  • 相关阅读:
    BE Learing 2 名词解释
    mysql学习笔记(二)之一个粗心的问题
    Struts2/XWork < 2.2.0远程执行任意代码漏洞分析及修补
    DataReceivedEventHandler 委托
    JS数组方法汇总 array数组元素的添加和删除
    jQuery学习总结(一)
    js的lock
    mysql学习笔记(一)之mysqlparameter
    Time Span Attack
    Web Vulnerability Scanner 7.0 Patch for 2010_09_21_01
  • 原文地址:https://www.cnblogs.com/adc8868/p/7465002.html
Copyright © 2011-2022 走看看