Elasticsearch 的query查询和filter查询的区别
引入
最近随着项目中在elasticsearch的数据越来越多以及查询条件的增多,需要对elasticsearch的优化
关于query和filter的区别
从查询上开始优化,这就要区别query和filter的查询区别
query的主要点是“此文档与此查询子句的匹配程度如何?”
filter的主要点是“此文档和查询子句匹配吗?”
query查询
- query查询,包含查询子句的查询条件;
- query查询,每一个查询满足条件的文档都有跟查询子句相关的匹配度;
- _socre, 分数越高,匹配越高;
- 适用于全文检索
filter查询
- filter查询,返回的结果只有对查询子句的是与不是;
- filter查询,不返回匹配度,不涉及分数;
- filter适用于精确查询;
- 不计算各个文档的评分,所以查询更快;
- filter有缓存;
总结
如果只有过滤(是与不是的查询)就使用filter, 如果包括匹配度的查询,就使用query查询,当然两者结合是最好的,具体情况具体分析,如果能使用filter替换就尽量替换,这样会提高效率,当然对于叶查询子句比如match、term、terms、range两个都能使用。