摘自:http://blog.csdn.net/seven_zhao/article/details/42708953

1.基于FunctionQuery,(1)创建类并继承ValueSource;(2)重写getValues方法。

 1 private class MyScore2 extends ValueSource{
 2
 3         @Override
 4         public FunctionValues getValues(Map context,
 5                 final AtomicReaderContext readerContext) throws IOException {
 6             return new FloatDocValues(this); }
 7
 8          @Override
 9          public float floatVal(int doc) {
10                float s = 1;
11                     //从域缓存中读取数据
12                     // 从域缓存中加载索引字段信息
13                     try {
14                         Longs longs= FieldCache.DEFAULT.getLongs(readerContext.reader(), "size", false);
15                         long size = longs.get(doc);
16                         if(size>1000){
17                             s = 0.5f;
18                         }
19                     } catch (IOException e) {
20                         // TODO Auto-generated catch block
21                         e.printStackTrace();
22                     }
23                     return s;
24                 }
25             }
26  }

2.(1)创建类并继承CustomScoreQuery
    (2)覆盖重写类中的getCusomScoreProvider方法
   (3)创建类并继承CustomScoreProvider
   (4)覆盖重写类中的customScore确定新的评分规则

public class MySelfScore {public void searchBySelfScore(){try{IndexSearcher search = new IndexSearcher(DirectoryReader.open(FileIndexUtils.getDirectory()));Query q = new TermQuery(new Term("content","java"));MyCustomScoreQuery myQuery = new MyCustomScoreQuery(q);TopDocs tds = search.search(myQuery, 200);SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");for(ScoreDoc sd:tds.scoreDocs){Document d = search.doc(sd.doc);System.out.println(sd.doc+":("+sd.score+")" +"["+d.get("filename")+"【"+d.get("path")+"】--->"+d.get("size")+"-----"+sdf.format(new Date(Long.valueOf(d.get("date"))))+"]");}System.out.println("-----------Total result:"+tds.scoreDocs.length);}catch(Exception e){e.printStackTrace();}}/***重写评分的实现方式* **/private class MyScoreProvider extends CustomScoreProvider{private AtomicReaderContext context;public MyScoreProvider(AtomicReaderContext context) {super(context);this.context = context;}/**重写评分方法,假定需求为文档size大于1000的评分/1000**/@Overridepublic float customScore(int doc, float subQueryScore, float valSrcScore)throws IOException {// 从域缓存中加载索引字段信息Longs longs= FieldCache.DEFAULT.getLongs(context.reader(), "size", false);/**注册使用自定义的评分实现方式**/// 1. 域值要单一,对于string类型不能分词(NOT_ANALYZED) // 2. 该域需要建入索引(INDEXED) // 3. 支持的数据类型,byte/short/int/long/float/double// weights.get(doc).utf8ToString();获取string值BinaryDocValues weights = FieldCache.DEFAULT.getTerms(context.reader(), "title", true);if(weights.get(doc).utf8ToString().equals("1")){System.out.println(doc+" : "+weights.get(doc).utf8ToString());System.out.println(context.reader().document(doc).get("author"));return subQueryScore * valSrcScore*15;}/* * 通过得分相乘放大分数 * 此处可以控制与原有得分结合的方式,加减乘除都可以 * **/return subQueryScore*valSrcScore;}}/*** 重写CustomScoreQuery 的getCustomScoreProvider方法 * 引用自定义的Provider */private class MyCustomScoreQuery extends CustomScoreQuery{public MyCustomScoreQuery(Query subQuery) {super(subQuery);}@Overrideprotected CustomScoreProvider getCustomScoreProvider(AtomicReaderContext context) throws IOException {return new MyScoreProvider(context);}}
}

转载于:https://www.cnblogs.com/qingyibusi/p/6170397.html

lucene 自定义评分相关推荐

  1. 【lucene】lucene自定义评分

    1.概述 @SuppressWarnings("serial")private class MyCustomScoreQuery extends CustomScoreQuery ...

  2. 《深入理解Elasticsearch(原书第2版)》——第2章 查询DSL进阶 2.1 Apache Lucene默认评分公式解释...

    本节书摘来自华章计算机<深入理解Elasticsearch(原书第2版)>一书中的第2章,第2.1节,作者 [美]拉斐尔·酷奇(Rafal Ku)马雷克·罗戈任斯基(Marek Rogoz ...

  3. 【Elasticsearch】Elasticsearch自定义评分的N种方法

    1.概述 首先参考文章:[Elasticsearch]Elasticsearch 相关度评分 TF&IDF 然后转载文章:实战 | Elasticsearch自定义评分的N种方法 2.三个问题 ...

  4. ES自定义评分机制:function_score查询详解

    一.function_score介绍 主要用于让用户自定义查询相关性得分,实现精细化控制评分的目的. 在ES的常规查询中,只有参与了匹配查询的字段才会参与记录的相关性得分score的计算.但很多时候我 ...

  5. Lucene的评分(score)机制研究

    首先,需要学习Lucene的评分计算公式-- 分值计算方式为查询语句q中每个项t与文档d的匹配分值之和,当然还有权重的因素.其中每一项的意思如下表所示: 表3.5 评分公式中的因子 评分因子 描 述 ...

  6. Lucene的评分(score)机制的简单解释

     Lucene的评分(score)机制的简单解释 博客分类: Lucene lucene编程Apachethread  通过Searcher.explain(Query query, int do ...

  7. python打分函数_自定义评分函数RandomForestRegress

    RandomizedSearchCV中的评分函数将只计算网格中指定的每个超参数组合的模型预测数据的得分,测试折叠中平均得分最高的超参数获胜.在 它不会以任何方式改变RandomForest内部算法的行 ...

  8. 自定义评分器Similarity,提高搜索体验

    首先说一下lucene对文档的评分规则: score(q,d)   =   coord(q,d) ·  queryNorm(q) · ∑ (tf(t in d) ·  idf(t)2 ·  t.get ...

  9. 自定义评分器Similarity,提高搜索体验(转)

    文章转自:http://blog.csdn.net/duck_genuine/article/details/6257540 首先说一下lucene对文档的评分规则: score(q,d)   =   ...

最新文章

  1. mysql5.6 分布式事务_mysql 分布式事务xa 示例
  2. 3D打印「心脏」体外存活超6个月,心肌组织带有规律性搏动,来自中科院清华...
  3. spring webmvc使用ResponseBody前,在配置文件中的配置
  4. redhat 5.6下网卡冗余实验
  5. html转为纯文本并且保留换行,使用jsoup将html转换为纯文本时,如何保留换行符?...
  6. 【es-未解决】es 报错 failed to process cluster event (put-mapping) within 30s
  7. android自定义静态广播失效,自定义的静态广播没有作用怎么处理
  8. zip压缩工具与tar打包并压缩工具
  9. lamp兄弟连java_LAMP兄弟连李明老师讲Linux视频教程下载
  10. PSD网页切图制作HTML全过程教程
  11. 知乎 高级操作系统_知乎问题:高级运营和普通运营有哪些区别?(更新版,赞赞赞!)...
  12. ApacheCN 活动汇总 2019.8.23
  13. Anaconda Clean命令
  14. 微信第三方平台对接小程序发版
  15. [bigdata-56] py3+selenium 抓取学信网 最简demo
  16. java.lang.IllegalArgumentException: argument type mismatch
  17. 我的世界皮肤站披风不加载或不更新问题
  18. 阿爸,通往地狱的路要走好
  19. colorAccent,colorPrimary,colorPrimaryDark做什么的?
  20. 链家网页爬虫_爬虫实战1-----链家二手房信息爬取

热门文章

  1. Gitlab部署和汉化以及简单运维
  2. [译]React高级话题之Context
  3. MySQL多实例安装配置指南
  4. 关系计划笔谈(9-1):泛BOM与虚拟产品
  5. 如何激励用户为你的app评分?
  6. Android用户界面开发(16):ImageSwitcher
  7. 从B 树、B+ 树、B* 树谈到R 树
  8. LeetCode.961-2N数组中N次重复的元素(N-Repeated Element in Size 2N Array)
  9. vue vue-cli3 修改elementui的date-picker源码 引入node_modules里的element-ui后报错exports is not defined...
  10. 算法62---最长回文子序列长度(子串)、回文子序列总共个数(子串)【动态规划】...