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插件)相关推荐

  1. elasticsearch查询操作(使用marvel插件)

    Elasticsearch是功能非常强大的全文搜索引擎,用它的目的就是为了能更快速的查询你想要的数据 基本查询:利用Elasticsearch内置查询条件进行查询 组合查询:把多个基本查询组合在一起的 ...

  2. 【ElasticSearch系列】简单谈谈kibana-由安装marvel插件而来

    为什么80%的码农都做不了架构师?>>>    前提: 前面已经有一篇文章介绍了ES插件的安装,其中提到了marvel插件.说实话marvel的插件安装并不是那么简单,倒不是因为难, ...

  3. Elasticsearch——filter过滤查询

    1. filter filter,就是按照搜索条件过滤出需要的数据,不计算任何相关度分数,对相关度没有影响 2. filter 与 query 对比 filter,按照搜索条件过滤出需要的数据,不计算 ...

  4. 【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 ...

  5. ElasticSearch6.x版本的SpringBoot增删改查操作和ElasticSearch6.x版本的过滤查询

    文章目录 一.教学讲解视频 二.SpringBoot操作ElasticSearch前期准备工作 三.SpringBoot增删改查ElasticSearch 1.新增修改 2.删除 3.查询 四.Ela ...

  6. Elasticsearch实战(十五)---查询query,filter过滤,结合aggs 进行局部/全局聚合统计

    Elasticsearch实战-查询query,filter过滤,结合aggs 进行局部/全局聚合统计 文章目录 Elasticsearch实战-查询query,filter过滤,结合aggs 进行局 ...

  7. elasticsearch索引的初始化操作以及marvel操作(增删改查),批量查询_mget,批量操作_bulk

    文中的简洁版都是使用marvel操作的 安装marvel插件的教程 https://blog.csdn.net/u013294097/article/details/100144725 1.创建索引之 ...

  8. Elasticearch Filter Query 过滤查询--(五)

    Elasticearch Filter Query 过滤查询 1,过滤查询 ES查询操作分为2种:查询(query)和 过滤(filter). 1. Query,默认计算每个返回文档的得分,然后根据得 ...

  9. 微服务项目之电商--19.ElasticSearch基本、高级查询和 过滤、结果过滤、 排序和聚合aggregations

    接上一篇 目录 3.查询 3.1.基本查询: 3.1.1 查询所有(match_all) 3.1.2 匹配查询(match) 3.1.3 多字段查询(multi_match) 3.1.4 词条匹配(t ...

最新文章

  1. 投稿近2000,NAACL 2019接收率仅为22.6%|附录取论文名单
  2. Mysql DBA 高级运维学习之路-mysql数据库入门知识
  3. python使用urllib模块开发的多线程豆瓣小站mp3下载器
  4. Windows CE的电源管理之三
  5. android zip文件读写,如何直接从.zip文件中读取文件而不在android中提取它
  6. SEO人生衔接后用户可随时随地同他的合作伙伴协同工作
  7. 【TSP】基于matlab自适应动态邻域布谷鸟混合算法求解旅行商问题【含Matlab源码 1513期】
  8. 行泊ADAS摄像头前装搭载同比增长54.15%,TOP10供应商领跑
  9. 最好的注册测绘师考试资料大全
  10. opnet之变量类型
  11. PS2022安装教程(附个人详细安装教程)
  12. 简易四六级成绩管理系统
  13. Altium Designer之多层板设置
  14. Word 恢复默认样式
  15. 微信文件过大不能上传?学会这几种方法,再大文件也能轻松发
  16. 十、惯性导航误差传播规律
  17. VMware vSphere 8.0U1
  18. ARGB与RGB、RGBA的区别
  19. PNP与NPN两种三极管使用方法
  20. 商品列表页面 html,商品列表模板

热门文章

  1. 工程计算软件_软件工程师的计算机基础理论知识体系
  2. php中如何滚动文字,HTML_网页HTML代码:滚动文字的制作,制作滚动文字 通过本章前面 - phpStudy...
  3. Exchange Server 2016 独立部署/共存部署 (八)—— 边缘角色服务器
  4. Terraform学习总结(2)——Terraform 语法详解
  5. 阿里巴巴开源技术汇总:115个软件(五)
  6. Mysql学习总结(37)——Mysql Limit 分页查询优化
  7. oracle date 隐式转换,PL/SQL中的数据类型隐式转换规则
  8. Day08- team、iptables、firewall
  9. Slim 框架源码解读
  10. Exchange2010 SP1及以上邮箱的数据导出与导入