导航菜单
路很长,又很短
博主信息
昵   称:Cocodroid ->关于我
Q     Q:2531075716
博文数:337
阅读量:1472370
访问量:166454
至今:
×
云标签 标签球>>
云标签 - Su的技术博客
博文->>首页 博主的更多博文>>
solr的随机排序
Tags : Solr,随机排序发表时间: 2015-09-15 19:12:26

有这样的一种需求,想从索引库里随机取出4条记录。



在 schema.xml:配置一个动态字段,如下。具体实现可以看代码 org.apache.solr.schema.RandomSortField


 
  1. <types>  
  2.  ...  
  3.  <fieldType name="random" class="solr.RandomSortField" />  
  4.  ...   
  5. </types>  
  6. <fields>  
  7.  ...  
  8.  <dynamicField name="rand*" type="random" indexed="true" stored="false"/>  
  9.  ...  
  10. </fields>  



由用户请求的时候按照一个动态字段排序,sort=rand_123456*类似,随机的生成,跟该动态字段有关

 

Examples of queries:



同一个url 返回的结果会是相同


 该字段实现自定义的一个比较器, 随机性跟传进来的动态字段名有关:主要的hash算法实现如下:


 

  1. private static int getSeed(String fieldName, AtomicReaderContext context) {  
  2.     final DirectoryReader top = (DirectoryReader) ReaderUtil.getTopLevelContext(context).reader();  
  3.     return fieldName.hashCode() + context.docBase + (int)top.getVersion();  
  4.   }  


 

  1. private static int hash(int key) {  
  2.   key = ~key + (key << 15); // key = (key << 15) - key - 1;  
  3.   key = key ^ (key >>> 12);  
  4.   key = key + (key << 2);  
  5.   key = key ^ (key >>> 4);  
  6.   key = key * 2057; // key = (key + (key << 3)) + (key << 11);  
  7.   key = key ^ (key >>> 16);  
  8.   return key >>> 1;   
  9. }  


原文:http://blog.csdn.net/duck_genuine/article/details/8477336

打赏
打赏
关注公众号
公众号
类别:ES/Solr| 阅读(1915)| 赞 (0)
评论
暂无评论!
发表评论
昵  称:

验证码:

内  容:

    同时赞一个 赞