solr特点三: 基于Solr实现排序定制化参考
一份索引,支持N种排序策略并且在线互不干扰是要考虑的
每一种实现,处理的场景是不同的,不要千篇一律
(1)排序定制化不同于实现业务排序。
实现业务排序可以是查阶段,通过boost、各种func 组合、离线score等单独或者组合实现排序目标,
或者索引构建阶段的 field boost、document boost
或者索引构建阶段的postion、freq、length等的处理
或者干预vsm、
或者实现自己的function,
或者自定义queryparser引入自定义的query和相关weight、score等。
或者自定义querycomponent,然后彻底从query链路调整查询和排序
或者以上的组合
(2)排序定制化
这里特指solr已经默认自带的排序机制,默认vsm、默认sortbyField、默认的function集合包括他们的组合、
默认的booleanquery、phrasequery、luceneparser、dismax 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");
(2)vsm bm25 的参数调整 extends SimilarityFactory{
配置在schema.xml中,作用域是整个solrcore。
(3)SearchComponent 的重写 extends SearchComponent
这里面可以实现
默认排序+topN的二次排序;或者直接定义自己的排序
这里面的实现是深度的干预查询链路,甚至cache。
这里的干预设计到shard请求,需要仔细验证
这里的干预有的需要parser的干预联合,用来解析参数
关于o2o个性化排序,建议走这个模式
(4)关于o2o个性化排序
schema的配置:距离算法、距离精度
排序策略:过滤优先 or 结果优先 or 速度优先 ,然后会有不同角度的平衡
涉及具体业务细节和排序公式,这里省略 1w字
solr特点三: 基于Solr实现排序定制化参考的更多相关文章
- 网易云基于 Kubernetes 的深度定制化实践
本文由 网易云发布. 2017 年,Kubernetes 超越 Mesos 和 Docker Swarm成为最受欢迎的容器编排技术.网易云从 2015 下半年开始向 Kubernetes 社区贡献代 ...
- solr特点三: QueryElevation(编辑结果排序)
在理想的情况下,搜索引擎只返回与用户查询相关的文档.而在现实的查询中,编辑(没发现更合适的表达)通常需要指定特定文档在搜索结果中的特定位置.这样做有很多原因.或许 “置顶” 的文档就是最好的查询结果. ...
- solr特点三: defType(查询权重排序)
Solr的defType有dismax/edismax两种,这两种的区别,可参见:http://blog.csdn.net/duck_genuine/article/details/8060026 e ...
- Solr系列三:solr索引详解(Schema介绍、字段定义详解、Schema API 介绍)
一.Schema介绍 1. Schema 是什么? Schema:模式,是集合/内核中字段的定义,让solr知道集合/内核包含哪些字段.字段的数据类型.字段该索引存储. 2. Schema 的定义方式 ...
- pytest+allure(allure-pytest基于这个插件)设计定制化报告
一:环境准备 1.python3.6 2.windows环境 3.pycharm 4.allure-pytest 5.allure2.8.0 6.java1.8 allure-pytest快速安装 在 ...
- pytest+allure(pytest-allure-adaptor基于这个插件)设计定制化报告
一:环境准备 1.python3.6 2.windows环境 3.pycharm 4.pytest-allure-adaptor 5.allure2.8.0 6.java1.8 pytest-allu ...
- Yoshino: 一个基于React的可定制化的PC组件库
Github: https://github.com/Yoshino-UI... Docs: https://yoshino-ui.github.io/#/ Cli-Tool: https://git ...
- ERP_基于Oracle ADF的定制化企业级IT系统解决方案
2014-12-31 Created By BaoXinjian
- Solr学习笔记(1) —— Solr概述&Solr的安装
一.概述 使用Solr实现电商网站中商品信息搜索功能,可以根据关键字.分类.价格搜索商品信息,也可以根据价格进行排序. 1.1 实现方法 在一些大型门户网站.电子商务网站等都需要站内搜索功能,使用传统 ...
随机推荐
- while循环优化版本-for循环
for i in range(0,10): if i <3: print("loop ",i) else : continue print("hehe...&quo ...
- HDU-3944 DP?(组合数求模)
一.题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=3944 二.题意 给一个巨大的杨辉三角,采用类似DP入门题“数字三角形”的方式求从顶点$(0, 0) ...
- python写exploit采集器
前言: 根据天文地理与风水学,我掐指一算的看到了一篇不错的文章,文章里面写到整理exploit 我顿时心理想写一个exploit采集器,那么说时迟那时快.就开始写了 代码: 思路:http://exp ...
- Android 多线程注意事项
参考:http://blog.csdn.net/x86android/article/details/14161981 http://geeksun.iteye.com/blog/1447708 An ...
- 温故而知新-面向对象的PHP
1 类的多态 不同的类对同一操作可以有不同的行为. 比如自行车和汽车都有移动这个成员函数行为, 那么自行车类可以移动,行为和汽车的移动行为肯定不同. 2 析构函数不能有参数 3 __set和__get ...
- python 黑魔法 ---上下文管理器(contextor)
所谓上下文 计算机上下文(Context)对于我而言,一直是一个很抽象的名词.就像形而上一样,经常听见有人说,但是无法和现实认知世界相结合. 最直观的上下文,莫过于小学的语文课,经常会问联系上下文,推 ...
- 把CString转化为char*
转:http://blog.sina.com.cn/s/blog_58e19ae7010003jt.html 正确方法:CString m_Head:char *codefile;codefile=( ...
- 【总结整理】关于挪车和虚拟号的思考-转载v2ex
https://www.baidu.com/link?url=A7wiF1JpOkT6Juo0nNHKcum0OiQsnRj-EZkQfjc3xB-noUeLy3HEY-4plbFmPmuJ& ...
- SqlMapConfig.xml配置文件中的mapper映射器标签
Mapper配置的几种方式: 1. <mapper resource=" "/> 使用相对于类路径的资源 如:<mapper resource="com ...
- MYISM表并发写请求过多 导致无法被读取解决方案
MyISAM锁调度是如何实现的呢,这也是一个很关键的问题.例如,当一个进程请求某个MyISAM表的读锁,同时另一个进程也请求同一表的写锁,此时MySQL将会如优先处理进程呢?通过研究表明,写进程将先获 ...