20_ElasticSearch rescoring机制优化近似匹配搜索的性能
2018-03-23 07:28
585 查看
20_ElasticSearch rescoring机制优化近似匹配搜索的性能
更多干货
分布式实战(干货)spring cloud 实战(干货)mybatis 实战(干货)spring boot 实战(干货)React 入门实战(干货)构建中小型互联网企业架构(干货)python 学习持续更新一、概述
rescore:重打分对match 查询的结果中的前几条重新使用proximity match 打分。原因是 match效率是proximity match的50倍,而proximity match 可以提高搜索的精度二、比较 match和phrase match(proximity match)区别
1、match
只要简单的匹配到了一个term,就可以理解将term对应的doc作为结果返回,扫描倒排索引,扫描到了就ok2、phrase match
首先扫描到所有term的doc list; 找到包含所有term的doc list; 然后对每个doc都计算每个term的position,是否符合指定的范围; slop,需要进行复杂的运算,来判断能否通过slop移动,匹配一个doc3、结论
match query的性能比phrase match和proximity match(有slop)要高很多。因为后两者都要计算position的距离。match query比phrase match的性能要高10倍,比proximity match的性能要高20倍。但是别太担心,因为es的性能一般都在毫秒级别,match query一般就在几毫秒,或者几十毫秒,而phrase match和proximity match的性能在几十毫秒到几百毫秒之间,所以也是可以接受的。三、优化proximity match的性能
优化proximity match的性能,一般就是减少要进行proximity match搜索的document数量。主要思路就是,用match query先过滤出需要的数据然后再用proximity match来根据term距离提高doc的分数同时proximity match只针对每个shard的分数排名前n个doc起作用,来重新调整它们的分数,这个过程称之为rescoring,重计分。因为一般用户会分页查询,只会看到前几页的数据,所以不需要对所有结果进行proximity match操作。使用match + proximity match同时实现召回率和精准度四、例子
默认情况下,match也许匹配了1000个doc,proximity match全都需要对每个doc进行一遍运算,判断能否slop移动匹配上,然后去贡献自己的分数但是很多情况下,match出来也许1000个doc,其实用户大部分情况下是分页查询的,所以可能最多只会看前几页比如一页是10条,最多也许就看5页,就是50条proximity match只要对前50个doc进行slop移动去匹配,去贡献自己的分数即可,不需要对全部1000个doc都去进行计算和贡献分数rescore:重打分:match:1000个doc,其实这时候每个doc都有一个分数了; proximity match,前50个doc,进行rescore,重打分,即可; 让前50个doc,term举例越近的,排在越前面GET /forum/article/_search { "query": { "match": { "content": "java spark" } }, "rescore": { "window_size": 50, "query": { "rescore_query": { "match_phrase": { "content": { "query": "java spark", "slop": 50 } } } } } }
相关文章
1_ElasticSearch使用term filter来搜索数据2_ElasticSearch filter执行原理 bitset机制与caching机制3_ElasticSearch 基于bool组合多个filter条件来搜索数据4_ElasticSearch 使用terms搜索多个值5_ElasticSearch 基于range filter来进行范围过滤6_ElasticSearch 控制全文检索结果的精准度7_ElasticSearch term+bool实现的multiword搜索原理8_基于boost的搜索条件权重控制9_ElasticSearch 多shard场景下relevance score不准确http://blog.csdn.net/qq_27384769/article/details/79645454" target=_blank>10_ElasticSearch dis_max实现best fields策略进行多字段搜索11_ElasticSearch 基于tie_breaker参数优化dis_max搜索效果12_ElasticSearch multi_match语法实现dis_max+tie_breaker13_ElasticSearch multi_match+most fiels策略进行multi-field搜索14_ElasticSearch 使用most_fields策略进行cross-fields search15_ElasticSearch copy_to定制组合field进行cross-fields搜索16_ElasticSearch 使用原生cross-fiels 查询17_ElasticSearch phrase matching搜索18_ElasticSearch 基于slop参数实现近似匹配日志管理ELK相关文章推荐
- Java性能优化之JVM GC(垃圾回收机制)
- Android性能优化--listview 优化机制
- MySQL性能优化的最佳20+条经验
- MYSQL性能优化的最佳20+条经验
- 【Java】Java-正则匹配-性能优化
- Android Studio 调试机制及性能优化工具使用
- MySQL 性能优化的最佳 20+ 条经验
- 干货 | Elasticsearch通用优化建议
- elasticsearch三个重要的优化
- MySQL性能优化的最佳20+条经验
- MySQL性能优化的最佳20+条经验
- MySQL性能优化的最佳20+条经验
- elasticsearch系统性能调优总结
- 分布式搜索Elasticsearch——创建客户端(六)
- 数据库查询性能优化(合理使用索引|避免或简化排序|避免对大型表进行全表顺序扫描|避免使用相关的子查询|避免使用通配符匹配 )
- 开源分布式搜索平台ELK(Elasticsearch+Logstash+Kibana)入门学习资源索引
- JVM GC 机制与性能优化
- 分布式搜索Elasticsearch——QueryBuilders.termQuery
- 分布式搜索Elasticsearch——QueryBuilders.idsQuery
- MySQL性能优化的最佳20+条经验