es的query及filter
为什么80%的码农都做不了架构师?>>>
##query与filter的合并
- Queries and filters merged
将filter的api列为deprecated,然后合并到query里头。之后查询的context就分为query的context和filter的context。凡是不是filter的context就走query的context。filter的话,其结果不参与score计算,而且会缓存,可能相对快一些。
###判断是否属于filter context
- the constant_score query
- the must_not and (newly added) filter parameter in the bool query
- the filter and filters parameters in the function_score query
- any API called filter, such as the post_filter search parameter, or in aggregations or index aliases
###deprecated的方式
{"query": {"filtered": {"filter": {"term": {"year": 1961}}}}
}
###合并后的方式
{"query": {"bool": {"filter": {"term": {"status": "active"}}}}
}
bool的话,这种方式出来的score为0,如果加上个match_all的话,则score为1
{"query": {"bool": {"must": {"match_all": {}},"filter": {"term": {"status": "active"}}}}
}
###constant_score方式
{"query": {"constant_score": {"filter": {"term": {"status": "active"}}}}
}
constant_score的方式,默认score为1
##match和term query的区别
- matchQuery的机制是:先检查字段类型是否是analyzed,如果是,则先分词,再去去匹配token;如果不是,则直接去匹配token。
- termQuery的机制是:直接去匹配token。
##对于value中带-的特殊处理 比如
{"query": {"bool": {"filter": {"term": {"status": "demo-active"}}}}
}
value带了-,则默认会被切词,导致搜索结果不准确。解决办法之一就是在字段那里加个.raw
{"query": {"bool": {"filter": {"term": {"status.raw": "demo-active"}}}}
}
##关于合并后的filter在java api中的使用 使用json最直接,省得再用java的api翻译一遍
String queryJson = "{\n" +" \"query\": {\n" +" \"constant_score\": {\n" +" \"filter\": {\n" +" \"term\": {\n" +" \"status.raw\": \"demo-active\"\n" +" }\n" +" }\n" +" }\n" +" }\n" +"}";
QueryBuilders.wrapperQuery(queryJson)
##doc
- ElasticSearch中的Filter DSL | 三分钟
- 在elasticsearch里如何高效的使用filter [性能优化必看]
- Bool Query
- 关于全文搜索elasticsearch中matchQuery和termQuery的区别
- ElasticSearch Java Query API 基本使用指南
- ElasticSearch searching with hyphen inside a word
- Terms table that has a "-" in the field splits the item up
转载于:https://my.oschina.net/go4it/blog/818094
es的query及filter相关推荐
- Elasticsearch实战(十五)---查询query,filter过滤,结合aggs 进行局部/全局聚合统计
Elasticsearch实战-查询query,filter过滤,结合aggs 进行局部/全局聚合统计 文章目录 Elasticsearch实战-查询query,filter过滤,结合aggs 进行局 ...
- ES中的Query与Filter的区别
QElasticsearch支持很多查询方式,其中一种就是DSL,它是把请求写在JSON里面,然后进行相关的查询. Query DSL 与 Filter DSL DSL查询语言中存在两种:查询DSL( ...
- ES的Query的DSL语法Filter DSL聚合分析
1 查询所有(match_all query) GET /lagou-company-index/_search { "query":{ "match_all" ...
- Elasticsearch query和filter过滤有什么不同
1. 概述 在使用DSL进行Elasticsearch的查询中,通常我们都是使用query进行过滤匹配,比如下面这段代码 GET /my_index/_search {"query" ...
- Elasticsearch DSL中Query与Filter的不同
Elasticsearch支持很多查询方式,其中一种就是DSL,它是把请求写在JSON里面,然后进行相关的查询. 举个DSL例子 GET _search {"query": { & ...
- 关于es查询dsl的filter与must,term与match的区别
[1]创建es7 索引 put localhost:9200/pdi_cust , 注意 PUB_CUST_LABEL 字段分词了. es7 不支持type ,所以 无需指定type. { &quo ...
- Es检索 must与filter区别
参考文章:Es检索 must与filter区别 must和filter使用场景 先使用filter把不需要的过滤掉,例如现在有一个电子商务的网站,我要查询一个category的id为1下面的所有产品, ...
- ES基本查询,filter 查询,组合查询
Elasticsearch 是功能强大的全文搜索引擎,用它的目的就是为了能快速的查询你想好要的数据 基本查询:利用Elasticsearch内置查询条件进行查询 组合查询:把多个基本查询组合在一起的复 ...
- 六:es 的Query DSL
Elasticsearch提供了基于JSON的完整查询DSL(特定于域的语言)来定义查询.将查询DSL视为查询的AST(抽象语法树),它由两种子句组成: 官网地址 1. Query and filte ...
最新文章
- Python os.path路径模块中的操作方法总结
- 再谈变分自编码器VAE:从贝叶斯观点出发
- php流导出excel内存溢出,phpExcel导出大量数据出现内存溢出错误的解决方法
- oracle 递归计算,SQL(Oracle)中的递归计算
- cloud 异步远程调用_异步远程工作的意外好处-以及如何拥抱它们
- 阿里云容器技术专家莫源:乘风踏雪归来,仍是此间少年
- [Ruby on Rails]Rails 3使用ActionMailer通过163发送邮件
- 排查Linux机器是否已经被入侵
- csdn中让图片居中
- TT安全小学生成长记
- IPv4和IPv6、局域网和广域网、网关、公网IP和私有IP、IP地址、子网掩码、网段、网络号、主机号、网络地址、主机地址以及ip段/数字-如192.168.0.1/24是什么意思?
- 图表无法显示中文字,都是方框框?
- 关于网站中Logo部分的写法
- 基于地理位置的Android AR app项目简述
- python基本类型关键字_python基本类型关键字_python中的关键字---1(基础数据类)...
- 45、链栈_LinkStack
- 黑鹰的VIP数据库(一)
- ❤️Android Apk 的打包过程 ❤️ 只需两幅图
- GPU 编程 CPU 异同点_分析师:英特尔(INTC.US)GPU不会构成威胁
- 微信支付回调通知实现