排序实现有N种形式,最低成本、最快响应时间是目标
 一份索引,支持N种排序策略并且在线互不干扰是要考虑的
每一种实现,处理的场景是不同的,不要千篇一律
020排序,从索引到效果,有不少坑,这篇文章没有细说,原因是有些内容不好公开
 
几点基础概念回顾
(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实现排序定制化参考的更多相关文章

  1. 网易云基于 Kubernetes 的深度定制化实践

    本文由  网易云发布. 2017 年,Kubernetes 超越 Mesos 和 Docker Swarm成为最受欢迎的容器编排技术.网易云从 2015 下半年开始向 Kubernetes 社区贡献代 ...

  2. solr特点三: QueryElevation(编辑结果排序)

    在理想的情况下,搜索引擎只返回与用户查询相关的文档.而在现实的查询中,编辑(没发现更合适的表达)通常需要指定特定文档在搜索结果中的特定位置.这样做有很多原因.或许 “置顶” 的文档就是最好的查询结果. ...

  3. solr特点三: defType(查询权重排序)

    Solr的defType有dismax/edismax两种,这两种的区别,可参见:http://blog.csdn.net/duck_genuine/article/details/8060026 e ...

  4. Solr系列三:solr索引详解(Schema介绍、字段定义详解、Schema API 介绍)

    一.Schema介绍 1. Schema 是什么? Schema:模式,是集合/内核中字段的定义,让solr知道集合/内核包含哪些字段.字段的数据类型.字段该索引存储. 2. Schema 的定义方式 ...

  5. pytest+allure(allure-pytest基于这个插件)设计定制化报告

    一:环境准备 1.python3.6 2.windows环境 3.pycharm 4.allure-pytest 5.allure2.8.0 6.java1.8 allure-pytest快速安装 在 ...

  6. 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 ...

  7. Yoshino: 一个基于React的可定制化的PC组件库

    Github: https://github.com/Yoshino-UI... Docs: https://yoshino-ui.github.io/#/ Cli-Tool: https://git ...

  8. ERP_基于Oracle ADF的定制化企业级IT系统解决方案

    2014-12-31 Created By BaoXinjian

  9. Solr学习笔记(1) —— Solr概述&Solr的安装

    一.概述 使用Solr实现电商网站中商品信息搜索功能,可以根据关键字.分类.价格搜索商品信息,也可以根据价格进行排序. 1.1 实现方法 在一些大型门户网站.电子商务网站等都需要站内搜索功能,使用传统 ...

随机推荐

  1. [LigerUI]使用记录

    1. 下拉框设定 鼠标移开隐藏 但想改变下拉框大小时 很难一次定位到下拉框右下角那个点 2. ligerTab 自带标题菜单 但想修改成类似于 chrome 的标题菜单时 貌似没有找到方法 我用 ea ...

  2. TCL列表

    列表是Tcl的基本可用数据类型之一.它是用于表示项目的有序集合.它可以包括不同类型的在同一列表的项目.此外,一个列表可以包含另一个列表. 需要注意的一个重要的事情是,列表表示为完全串并处理在需要时,形 ...

  3. 常见的加密和解密算法—DES

    一.DES加密概述 DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并 ...

  4. python编程遇见的异常

    import sys print('目前系统的编码为:',sys.getdefaultencoding()) # 目前系统的编码为: utf-8 name = 'this is a test!' pr ...

  5. javascript中 关于eval的那些事

    javascript中的eval是一个非常灵活,但是灵活是伴随着风险的. 一.下面我们来看看那使用eval声明变量的问题. function test(x){ eval("var a=x;& ...

  6. todolist_高级写法

    <!DOCTYPE html><html><head>    <meta http-equiv="Content-Type" conten ...

  7. 集合工具类CollectionUtils、ListUtils、SetUtils、MapUtils的使用

    主要用它的isEmpty(final Collection<?> coll)静态方法来判断一个给定的集合是否为null或者是否长度为0.最近才发现此工具类还可以取集合的交集.并集.甚至差集 ...

  8. @@ERROR和@@ROWCOUNT的用法

    1.         @ERROR 当前一个语句遇到错误,则返回错误号,否则返回0.需要注意的是@ERROR在每一条语句执行后会被立刻重置,因此应该在要验证的语句执行后检查数值或者是将它保存到局部变量 ...

  9. mac 下 python链接mysql

    安装过程 :http://blog.topspeedsnail.com/archives/6018 注意 报错的话要先装一个东西 http://cdn.mysql.com/Downloads/Conn ...

  10. spring集成mybatis配置多个数据源,通过aop自动切换

    spring集成mybatis,配置多个数据源并自动切换. spring-mybatis.xml如下: <?xml version="1.0" encoding=" ...