elasticsearch使用Filter过滤查询操作(使用marvel插件)
1.filter查询语句
1)通过filter可以获取想要的数据
2)通过filter查询有缓存,大大提高查询效率,所以推荐使用filter查询
2.cache缓存
3.实例数据,准备数据:
POST /store/products/_bulk
{"index":{"_id":1}}
{"price":10,"productID":"SD1002136"}
{"index":{"_id":2}}
{"price":20,"productID":"SD2678421"}
{"index":{"_id":3}}
{"price":30,"productID":"SD8897573"}
{"index":{"_id":4}}
{"price":40,"productID":"SD4535233"}
4.查看测试数据
GET /store/products/_mget
{"ids":[1,2,3,4]
}
5.filter查询
最简单的filter查询
先看看sql语句: select document from products where price = 20
filter的语句
GET /store/products/_search
{"query": {"filtered": {"query": {"match_all": {}},"filter": {"term": {"price": "20"}}}}
}
也可以指定多个值
GET /store/products/_search
{"query": {"filtered": {"query": {"match_all": {}},"filter": {"terms": {"price": ["10","20"]}}}}
}
再看另一个 select * from products where productId = "SD4535233"
GET /store/products/_search
{"query": {"filtered": {"query": {"match_all": {}},"filter": {"term": {"productID": "sd1002136"}}}}
}注意:这里的大写查不到
对字段进行分析:
查看字段的分析结果,可以看到分析结果是小写的,所以上面的大写查找不到
GET /_analyze?text=SD4535233结果如下:{"tokens": [{"token": "sd4535233","start_offset": 0,"end_offset": 9,"type": "<ALPHANUM>","position": 1}]
}
如果想要大写也可以搜索到,那么需要对该字段的mapping设置为not_analyzed,不进行分析器分析
DELETE /storePUT /store
{"mappings": {"products":{"properties": {"productID":{"type":"string","index":"not_analyzed"}}}}
}
6.bool过滤查询,可以做组合过滤查询
SELECT product FROM products where (price = 20 OR productID = 'SD1002136' ) AND (price != 30)
查询价格等于20的或者productID 为SD1002136的商品,排除价格30元的
类似的,elasticsearch也有and,or,not这样的组合条件查询方式
格式如下:
{"bool":{"must":[],"should":[],"must_not":[]}
}
must : 条件必须满足,相当于and
should:条件可以满足也可以不满足,相当于or
must_not:条件不需要满足,相当于not
示例:
GET /store/products/_search
{"query":{"filtered": {"query": {"match_all": {}},"filter": {"bool": {"should": [{"term": {"price": "20"}},{"term": {"productID": "SD2678421"}}],"must_not": [{"term": {"price": "30"}}]}}}}
}
7.嵌套查询
1)示例sql:select * from products where productID = "SD1002136" OR (productID = "SD4535233" AND price = 30)
示例查询:
GET /store/products/_search
{"query": {"filtered": {"query": {"match_all": {}},"filter": {"bool": {"should": [{"term": {"productID": "sd1002136"}},{"bool": {"must": [{"term": {"productID": "sd4535233"}},{"term": {"price": "30"}}]}}]}}}}
2) 另外一种:and , or , not查询
没有bool,直接使用and ,or ,not
示例,and的:
GET /store/products/_search
{"query": {"filtered": {"query": {"match_all": {}},"filter": {"and":[{"term":{"price" : 10}},{"term":{"productID":"sd1002136"}}]}}}
}
示例,or的:
GET /store/products/_search
{"query": {"filtered": {"query": {"match_all": {}},"filter": {"or":[{"term":{"price" : 10}},{"term":{"productID":"sd4535233"}}]}}}
}
not示例:
GET /store/products/_search
{"query": {"filtered": {"query": {"match_all": {}},"filter": {"not":{"term":{"price" : 10}}}}}
}
8.range范围查询
示例sql: select * from products where price between 20 and 40
gt > 大于
lt < 小于
gte >= 大于等于
lte <= 小于等于
示例:
GET /store/products/_search
{"query": {"filtered": {"query": {"match_all": {}},"filter": {"range": {"price": {"gte": 10,"lte": 20}}}}}
}
9.过滤空和非空
1)建立测试数据
POST /test_index/test/_bulk
{"index":{"_id":1}}
{"tags":["search"]}
{"index":{"_id":2}}
{"tags":["search","open_source"]}
{"index":{"_id":3}}
{"other_field":"some data"}
{"index":{"_id":4}}
{"tags":null}
{"index":{"_id":5}}
{"tags":["search",null]}
2)处理null空值的方法
select tags from test where tags is not null
select tags from test where tags is null
示例:
is not null
GET /test_index/test/_search
{"query": {"filtered": {"query": {"match_all": {}},"filter": {"exists": {"field": "tags"}}}}
}
is null
GET /test_index/test/_search
{"query": {"filtered": {"query": {"match_all": {}},"filter": {"missing": {"field": "tags"}}}}
}
10.cache缓存
elasticsearch在执行带有filter查询时,会打开索引的每个segment文件(lucene底层文件),然后去判断里面的文档是否符合filter要求。
注意:旧的segment文件不会变,新来的数据会产生新的segment。
匹配的结果会用一个大型的BigSet数组来存储,这个数组的值只有0和1
匹配:1
不匹配:0
BigSet值是存在内存里的,而不是硬盘里,所以速度快!
开启方式:在filter查询语句后面加"_cache":true
注意:
Script filters,Geo-filters,Date ranges这样的过滤方式开启cache毫无意义
exists,missing,range,term和terms查询时默认开启cache的
示例:
GET /store/products/_search
{"query":{"filtered": {"query": {"match_all": {}},"filter": {"bool": {"should": [{"term": {"price": "20"}},{"term": {"productID": "SD2678421"}}],"_cache":true,"must_not": [{"term": {"price": "30"}}]}}}}
}
elasticsearch使用Filter过滤查询操作(使用marvel插件)相关推荐
- elasticsearch查询操作(使用marvel插件)
Elasticsearch是功能非常强大的全文搜索引擎,用它的目的就是为了能更快速的查询你想要的数据 基本查询:利用Elasticsearch内置查询条件进行查询 组合查询:把多个基本查询组合在一起的 ...
- 【ElasticSearch系列】简单谈谈kibana-由安装marvel插件而来
为什么80%的码农都做不了架构师?>>> 前提: 前面已经有一篇文章介绍了ES插件的安装,其中提到了marvel插件.说实话marvel的插件安装并不是那么简单,倒不是因为难, ...
- Elasticsearch——filter过滤查询
1. filter filter,就是按照搜索条件过滤出需要的数据,不计算任何相关度分数,对相关度没有影响 2. filter 与 query 对比 filter,按照搜索条件过滤出需要的数据,不计算 ...
- 【ES笔记02】ElasticSearch数据库之查询操作(match、must、must_not、should、_source、filter、range、exists、ids、term、terms)
这篇文章,主要介绍ElasticSearch数据库之查询操作(match.must.must_not.should._source.filter.range.exists.ids.term.terms ...
- ElasticSearch6.x版本的SpringBoot增删改查操作和ElasticSearch6.x版本的过滤查询
文章目录 一.教学讲解视频 二.SpringBoot操作ElasticSearch前期准备工作 三.SpringBoot增删改查ElasticSearch 1.新增修改 2.删除 3.查询 四.Ela ...
- Elasticsearch实战(十五)---查询query,filter过滤,结合aggs 进行局部/全局聚合统计
Elasticsearch实战-查询query,filter过滤,结合aggs 进行局部/全局聚合统计 文章目录 Elasticsearch实战-查询query,filter过滤,结合aggs 进行局 ...
- elasticsearch索引的初始化操作以及marvel操作(增删改查),批量查询_mget,批量操作_bulk
文中的简洁版都是使用marvel操作的 安装marvel插件的教程 https://blog.csdn.net/u013294097/article/details/100144725 1.创建索引之 ...
- Elasticearch Filter Query 过滤查询--(五)
Elasticearch Filter Query 过滤查询 1,过滤查询 ES查询操作分为2种:查询(query)和 过滤(filter). 1. Query,默认计算每个返回文档的得分,然后根据得 ...
- 微服务项目之电商--19.ElasticSearch基本、高级查询和 过滤、结果过滤、 排序和聚合aggregations
接上一篇 目录 3.查询 3.1.基本查询: 3.1.1 查询所有(match_all) 3.1.2 匹配查询(match) 3.1.3 多字段查询(multi_match) 3.1.4 词条匹配(t ...
最新文章
- 投稿近2000,NAACL 2019接收率仅为22.6%|附录取论文名单
- Mysql DBA 高级运维学习之路-mysql数据库入门知识
- python使用urllib模块开发的多线程豆瓣小站mp3下载器
- Windows CE的电源管理之三
- android zip文件读写,如何直接从.zip文件中读取文件而不在android中提取它
- SEO人生衔接后用户可随时随地同他的合作伙伴协同工作
- 【TSP】基于matlab自适应动态邻域布谷鸟混合算法求解旅行商问题【含Matlab源码 1513期】
- 行泊ADAS摄像头前装搭载同比增长54.15%,TOP10供应商领跑
- 最好的注册测绘师考试资料大全
- opnet之变量类型
- PS2022安装教程(附个人详细安装教程)
- 简易四六级成绩管理系统
- Altium Designer之多层板设置
- Word 恢复默认样式
- 微信文件过大不能上传?学会这几种方法,再大文件也能轻松发
- 十、惯性导航误差传播规律
- VMware vSphere 8.0U1
- ARGB与RGB、RGBA的区别
- PNP与NPN两种三极管使用方法
- 商品列表页面 html,商品列表模板
热门文章
- 工程计算软件_软件工程师的计算机基础理论知识体系
- php中如何滚动文字,HTML_网页HTML代码:滚动文字的制作,制作滚动文字 
通过本章前面 - phpStudy...
- Exchange Server 2016 独立部署/共存部署 (八)—— 边缘角色服务器
- Terraform学习总结(2)——Terraform 语法详解
- 阿里巴巴开源技术汇总:115个软件(五)
- Mysql学习总结(37)——Mysql Limit 分页查询优化
- oracle date 隐式转换,PL/SQL中的数据类型隐式转换规则
- Day08- team、iptables、firewall
- Slim 框架源码解读
- Exchange2010 SP1及以上邮箱的数据导出与导入