【百度云搜寻,搜各种材料:http://www.lqkweb.com】
【搜网盘,搜各种材料:http://www.swpan.cn】

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"        }      }    }  }}