基于Solr实现排序定制化参考

简介: 假期重新把之前在新浪博客里面的文字梳理了下,搬到这里。 本文Solr实现排序定制化的实践参考。排序实现有N种形式,最低成本、最快响应时间是目标。 一份索引,支持N种排序策略并且在线互不干扰是要考虑的。每一种实现,处理的场景是不同的,不要千篇一律。020排序,从索引到效果,有不少坑,这篇文章没有细说,原因是有些内容不好公开。

几点基础概念回顾

1)排序定制化不同于实现业务排序。      

    实现业务排序可以是查阶段,通过boost、各种func 组合、离线score等单独或者组合实现排序目标,

或者索引构建阶段的 field boostdocument boost
     
或者索引构建阶段的postionfreqlength等的处理      

或者干预vsm          

或者实现自己的function      

或者自定义queryparser引入自定义的query和相关weightscore等。      

或者自定义querycomponent,然后彻底从query链路调整查询和排序      

或者以上的组合

2)排序定制化    

这里特指solr已经默认自带的排序机制,默认vsm、默认sortbyField、默认的function集合包括他们的组合、    

默认的booleanqueryphrasequeryluceneparserdismax parser等 都不能满足排序需求的。    

然后需要开口子,引入自己的排序。

3)排序是动态的过程    

绝对不是一次设置,永久有效的。随着数据集的变化、业务场景的变化、市场的变化等因素,排序只是阶段  
   
性满足业务需求。这意味着排序是不间断的过程,没有最好,只有更好。

4)排序是 one doc one score just    

这里是说获取到了doc,就获取了这个doc的得分,doc的得分只关联这个doc自身的内容。间接的意思,每个doc的得分是自身闭包的,与其他doc的得分情况无关。


基于solr实现排序定制的几种有效、低成本实现

1) 简单、直接的  extends ValueSourceParser  

solrconfig.xml 中配置自己的valueSourceParser,查询结点通过name 对应的关键词调用相关排序。  作用域是在查询中设置,需要的时候就启用  eg 配置

查询 query.add("sort", "sortRank(id@itemType) asc");

2vsm bm25 的参数调整 extends SimilarityFactory{  

 配置在schema.xml中,作用域是整个solrcore

3SearchComponent 的重写 extends SearchComponent  

这里面可以实现 默认排序+topN的二次排序;或者直接定义自己的排序   这里面的实现是深度的干预查询链路,甚至cache   这里的干预设计到shard请求,需要仔细验证   这里的干预有的需要parser的干预联合,用来解析参数   关于o2o个性化排序,建议走这个模式

4)关于o2o个性化排序   

schema的配置:距离算法、距离精度   排序策略:过滤优先 or 结果优先 or 速度优先 ,然后会有不同角度的平衡    涉及具体业务细节和排序公式,这里省略 1w

目录
相关文章
|
JSON Ubuntu Java
Elasticsearch聚合学习之四:结果排序
在前面的实战中,聚合的结果以桶(bucket)为单位,放在JSON数组中返回,这些数据是没有排序的,今天来学习如何给这些数据进行排序
447 0
Elasticsearch聚合学习之四:结果排序
|
1月前
|
自然语言处理 搜索推荐 Java
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图(一)
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图
50 0
|
1月前
|
存储 自然语言处理 搜索推荐
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图(二)
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图(二)
34 0
|
3月前
|
存储 运维 搜索推荐
运维开发.索引引擎ElasticSearch.倒序索引的概念
运维开发.索引引擎ElasticSearch.倒序索引的概念
52 1
|
JSON 安全 搜索推荐
白日梦的Elasticsearch实战笔记,32个查询案例、15个聚合案例、7个查询优化技巧(一)
白日梦的Elasticsearch实战笔记,32个查询案例、15个聚合案例、7个查询优化技巧(一)
1016 0
|
存储 JSON 自然语言处理
40-微服务技术栈(高级):分布式搜索引擎ElasticSearch(DSL语法、搜索结果[排序/分页/高亮]处理)
在前面的学习中,笔者带领大家完成海量数据导入ES,实现了ES基本的存储功能,但是我们知道ES最擅长的还是搜索、数据分析。所以本节笔者将继续带领大家研究一下ES的数据搜索功能,同上节一样,继续分别采用DSL和RestClient实现搜索。
134 0
|
NoSQL MongoDB 索引
软件开发入门教程网 之MongoDB 覆盖索引查询
【摘要】 本章将会讲解由于所有出现在查询中的字段是索引的一部分, MongoDB 无需在整个数据文档中检索匹配查询条件和返回使用相同索引的查询结果。 因为索引存在于RAM中,从索引中获取数据比通过扫描文档读取数据要快得多。
|
测试技术 块存储 索引
《Elastic(中国)基础开发宝典》——Elasticsearch优化排序查询,更快获得结果
《Elastic(中国)基础开发宝典》——Elasticsearch优化排序查询,更快获得结果
|
存储 NoSQL MongoDB
​​​软件开发入门教程网之MongoDB 查询分析
本章将会讲解MongoDB 查询分析可以确保我们所建立的索引是否有效,是查询语句性能分析的重要工具。
​​​软件开发入门教程网之MongoDB 查询分析
|
SQL 存储 关系型数据库
【MySQL从入门到精通】【高级篇】(二十八)子查询优化,排序优化,GROUP BY优化和分页查询优化
上一篇文章我们介绍了 1024程序员节|【MySQL从入门到精通】【高级篇】(二十七)外连接和内连接如何进行查询优化呢?join的原理了解一波,这篇文章我们接着来学习,本文主要学习的是子查询优化,排序优化,GROUP BY优化以及分页查询优化。
495 0
【MySQL从入门到精通】【高级篇】(二十八)子查询优化,排序优化,GROUP BY优化和分页查询优化