第三百六十六节,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":""}}
{"tags":["search"]}
{"index":{"_id":""}}
{"tags":["search","python"]}
{"index":{"_id":""}}
{"other_field":["some data"]}
{"index":{"_id":""}}
{"tags":null}
{"index":{"_id":""}}
{"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"
}
}
}
}
}

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

  1. 第三百五十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—将bloomfilter(布隆过滤器)集成到scrapy-redis中

    第三百五十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—将bloomfilter(布隆过滤器)集成到scrapy-redis中,判断URL是否重复 布隆过滤器(Bloom Filter)详 ...

  2. 第三百五十三节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy的暂停与重启

    第三百五十三节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy的暂停与重启 scrapy的每一个爬虫,暂停时可以记录暂停状态以及爬取了哪些url,重启时可以从暂停状态开始爬取过的UR ...

  3. 第三百六十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索功能

    第三百六十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索功能 Django实现搜索功能 1.在Django配置搜索结果页的路由映 ...

  4. 第三百六十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本查询

    第三百六十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本查询 1.elasticsearch(搜索引擎)的查询 elasticsearch是功能 ...

  5. 第三百六十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的mapping映射管理

    第三百六十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的mapping映射管理 1.映射(mapping)介绍 映射:创建索引的时候,可以预先定义字 ...

  6. 第三百六十节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本概念

    第三百六十节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本概念 elasticsearch的基本概念 1.集群:一个或者多个节点组织在一起 2.节点 ...

  7. 第三百六十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索的自动补全功能

    第三百六十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—用Django实现搜索的自动补全功能 elasticsearch(搜索引擎)提供了自动补全接口 官方说明:https://www.e ...

  8. 第三百六十七节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)scrapy写入数据到elasticsearch中

    第三百六十七节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)scrapy写入数据到elasticsearch中 前面我们讲到的elasticsearch( ...

  9. 第三百六十三节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的mget和bulk批量操作

    第三百六十三节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的mget和bulk批量操作 注意:前面讲到的各种操作都是一次http请求操作一条数据,如果想 ...

随机推荐

  1. 如何高效的学习 TensorFlow 代码? 以及TensorFlow相关的论文

    https://www.zhihu.com/question/41667903 源码分析 http://www.cnblogs.com/yao62995/p/5773578.html 如何贡献Tens ...

  2. (原创)c++11改进我们的模式之改进观察者模式

    和单例模式面临的是同样的问题,主题更新的接口难以统一,很难做出一个通用的观察者模式,还是用到可变模板参数解决这个问题,其次还用到了右值引用,避免多余的内存移动.c++11版本的观察者模式支持注册的观察 ...

  3. 每日英语:Apple Unveils New iPads

    Apple Inc. 's answer to the increasingly cutthroat tablet-computer market: more product choices and ...

  4. (转)CTP: 平昨仓与平今仓,log轻轻告诉你.......

    转自:http://blog.csdn.net/wowotuo/article/details/43242663 CTP的相关文档告诉我们,中金所和三大商品交易所中,只有上期所区分平今仓和平昨仓.也就 ...

  5. 【delphi】delphi操作sqlite3

    SQLite SQLite是一个老牌的轻量级别的本地文件数据库,完全免费且开源,不需要安装,无须任何配置,当然,这样管理功能就不是很强大了,但是它的主要应用也是在本地数据库,可以说是最简单好用的嵌入式 ...

  6. 在CentOS6.5上安装/启动PostgreSQL

    CentOS install PostgreSQL yum install postgresql-server Start PostgreSQL service postgresql initdb # ...

  7. 标准JAVA MD5方法

    https://blog.csdn.net/wangfei0904306/article/details/71565968 ************************************** ...

  8. ElasticSearch5.3安装head插件及连接ElasticSearch

    1. 安装插件head # 去github上下载head git clone git://github.com/mobz/elasticsearch-head.git # 由于head基于nodejs ...

  9. poj2965(位运算压缩+bfs+记忆路径)

    题意:有个4*4的开关,里面有着16个小开关 -+-- ---- ---- '+'表示开关是关着的,'-'表示开关是开着的,只有所有的开关全被打开,总开关才会被打开.现在有一种操作,只要改变某个开关, ...

  10. ARKit从入门到精通(6)-ARSession介绍

    转载:http://blog.csdn.net/u013263917/article/details/73157082 ARSession是一个连接底层与AR视图之间的桥梁,其实ARSCNView内部 ...