`

十八、自定义评分

 
阅读更多

public class MyCustomScoreProvider extends CustomScoreProvider {

        public MyCustomScoreProvider(IndexReader reader) {
            super(reader);
        }
        
        
/**
         * subQueryScore表示默认文档的打分
         * valSrcScore表示的评分域的打分
         */
        @Override
        public float customScore(int doc, float subQueryScore, float valSrcScore)
                throws IOException {
            return subQueryScore/valSrcScore;
        }

       

}


private class FilenameScoreProvider extends CustomScoreProvider {
        String[] filenames = null;
        public FilenameScoreProvider(IndexReader reader) {
            super(reader);
            try {
                filenames = FieldCache.DEFAULT.getStrings(reader, "filename");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
       
        @Override
        public float customScore(int doc, float subQueryScore, float valSrcScore)
                throws IOException {
            //如何根据doc获取相应的field的值
            /*
             * 在reader没有关闭之前,所有的数据会存储在一个域缓存中,可以通过域缓存获取很多有用的信息
             * filenames = FieldCache.DEFAULT.getStrings(reader, "filename");可以获取所有的filename域的信息
             */
            String filename = filenames[doc];
            if(filename.endsWith(".txt")||filename.endsWith(".ini")) {
                return subQueryScore*1.5f;
            }
            return subQueryScore/1.5f;

        }
    }



public class MyCustomScoreQuery extends CustomScoreQuery {
       
        public MyCustomScoreQuery(Query subQuery, ValueSourceQuery valSrcQuery) {
            super(subQuery, valSrcQuery);
        }
       
        @Override
        protected CustomScoreProvider getCustomScoreProvider(IndexReader reader)
                throws IOException {
           
//默认情况实现的评分是通过原有的评分*传入进来的评分域所获取的评分来确定最终打分的
            //为了根据不同的需求进行评分,需要自己进行评分的设定
            /**
             * 自定评分的步骤
             * 创建一个类继承于CustomScoreProvider
             * 覆盖customScore方法
             */
            return new
MyCustomScoreProvider (reader);
        }
       
    }


@SuppressWarnings("serial")
    private class FilenameScoreQuery extends CustomScoreQuery {

        public FilenameScoreQuery(Query subQuery) {
            super(subQuery);
        }
       
        @Override
        protected CustomScoreProvider getCustomScoreProvider(IndexReader reader)
                throws IOException {
            return new FilenameScoreProvider(reader);
        }
       
    }



public void searchByScoreQuery() {
        try {
            IndexSearcher searcher = new IndexSearcher(IndexReader.open(FileIndexUtils.getDirectory()));
            Query q = new TermQuery(new Term("content","java"));
            //1、创建一个评分域
            FieldScoreQuery fd = new FieldScoreQuery("score",Type.INT);
            //2、根据评分域和原有的Query创建自定义的Query对象
            MyCustomScoreQuery query = new MyCustomScoreQuery(q,fd);

            TopDocs tds = null;
            tds = searcher.search(query, 100);
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
            for(ScoreDoc sd:tds.scoreDocs) {
                Document d = searcher.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"))))+"]");
            }
            searcher.close();
        } catch (CorruptIndexException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


public void searchByFileScoreQuery() {
        try {
            IndexSearcher searcher = new IndexSearcher(IndexReader.open(FileIndexUtils.getDirectory()));
            Query q = new TermQuery(new Term("content","java"));
            FilenameScoreQuery query = new FilenameScoreQuery(q);

            TopDocs tds = null;
            tds = searcher.search(query, 100);
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
            for(ScoreDoc sd:tds.scoreDocs) {
                Document d = searcher.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"))))+"]");
            }
            searcher.close();
        } catch (CorruptIndexException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


分享到:
评论

相关推荐

    lucene 自定义评分

    然而,Lucene 的默认评分机制可能无法满足所有场景下的需求,这就需要我们对其进行自定义评分来实现特定的权重分配。本文将深入探讨如何在 Lucene 中实现自定义评分,以及它对提高搜索质量的重要性。 在 Lucene 中...

    Elasticsearch5.5.1 自定义评分插件开发 文本相似度

    Elasticsearch5.5.1 自定义评分插件开发 文本相似度Elasticsearch5.5.1 自定义评分插件开发 文本相似度Elasticsearch5.5.1 自定义评分插件开发 文本相似度

    solr自定义评分组件demo.zip

    在"solr自定义评分组件demo.zip"这个压缩包中,包含了一个示例项目,用于演示如何在Solr中实现自定义评分组件。主要文件有两个:`pom.xml`和`src`。 `pom.xml`是Maven项目的配置文件,它定义了项目依赖和构建设置。...

    自定义评分组件

    然而,系统默认的RatingBar可能无法满足所有设计需求,因此,自定义评分组件成为了一个重要的技能。在本篇中,我们将深入探讨如何在Android中实现一个自定义的评分组件。 首先,我们需要了解 RatingBar 的基本用法...

    自定义商城评分星星条

    在IT行业中,自定义商城评分星星条是一种常见的用户反馈机制,它允许用户通过直观的星形图标来评价商品或服务,通常用于电商平台的商品评价、店铺评级等场景。这种设计不仅简洁明了,还能够快速传达用户对产品满意度...

    asp.net自定义评分系统

    在ASP.NET平台上构建一个自定义评分系统是一项常见的需求,它能够为用户提供互动性,并收集用户对网站内容或服务的反馈。下面将详细讲解如何利用ASP.NET实现这样的系统,包括涉及的关键技术、步骤以及可能遇到的问题...

    android自定义评分控件ratingbar

    在Android开发中, RatingBar 是一个内置的控件,用于显示评分或评级,通常以星形图标表示。然而,原生的RatingBar样式有限,不能满足所有设计需求。因此,开发者有时会选择自定义RatingBar来实现更个性化的视觉效果...

    安卓自定义控件相关-android自定义评分控件ratingbar.rar

    本资源"安卓自定义控件相关-android自定义评分控件ratingbar.rar"提供了关于如何在Android平台上实现自定义评分条(RatingBar)的示例。下面将详细阐述自定义评分控件的相关知识点。 1. **自定义View的基础** 在...

    solr实现电商自定义打分

    函数查询允许我们在查询语句中嵌入自定义的评分函数,这些函数可以是基于字段值的计算,如商品的价格、销量等。例如,我们可以定义一个评分函数,将销量和用户评价作为权重,结合TF-IDF得分进行综合评分。 以下是一...

    自定义评分控件RatingBar

    在Android开发中,RatingBar是一种常用的用户界面组件,它允许用户进行评分选择,通常表现为星形图标。本篇文章将深入探讨如何自定义RatingBar,以满足特定的设计需求和交互效果。 首先,我们要了解RatingBar的基本...

    安卓StarBar自定义评分demo

    本示例“安卓StarBar自定义评分demo”旨在帮助开发者快速理解和应用自定义的评分条功能。通过这个demo,开发者可以学习到如何在自己的应用中实现一个美观且功能完善的评分系统,只需少量代码即可完成。 首先,我们...

    luncene 4.6 自定义查询评分规则

    该类重写了 `getCustomScoreProvider` 方法,返回一个实现了自定义评分逻辑的 `CustomScoreProvider` 对象实例。在本例中,返回的是 `MyCustomScoreProvider` 类的实例。 #### 三、`CustomScoreProvider` 类详解 `...

    ios-自定义评分显示.zip

    在iOS开发中,自定义评分显示是一个常见的需求,特别是在应用评价、商品评级或者用户反馈等场景。本项目“ios-自定义评分显示.zip”显然提供了一个解决方案,它可以帮助开发者实现根据服务器返回的数据动态展示星星...

    自定义星型评分控件源码

    本文将深入探讨如何创建一个自定义的星型评分控件,包括它的源码解析、实现原理以及应用场景。这个控件允许用户通过点击星星来即时给出评分,支持回发和不回发两种评分机制。 首先,我们要理解什么是自定义控件。在...

    自定义评分条

    本节将深入探讨如何在Android中实现自定义评分条。 首先,让我们了解Android内置的RatingBar。RatingBar继承自ProgressBar,它有固定数量的星星,并且可以设置为半星或全星显示。通过XML布局文件,我们可以设置...

    android 自定义评分

    在Android开发中,自定义评分组件是一...以上就是关于Android自定义评分组件的实现细节,涵盖了从UI设计、事件处理到数据交互的全过程。通过这样的自定义,我们可以创建出满足特定需求的评分系统,提升应用的用户体验。

    自定义的星级评分样式

    在IT行业中,自定义的星级评分样式是一种常见的用户体验设计元素,尤其在电商、评论系统以及各种评分服务中广泛应用。这种自定义的星级评分样式能够帮助用户直观地了解某个产品或服务的质量,同时也能为网站增添视觉...

    自定义星级评分条

    在IT界,自定义星级评分条是一种常见的用户界面(UI)元素,用于让用户对产品、服务或内容进行评价。这种控件通常由一系列星形图标组成,用户可以选择一颗或多颗星来表示他们的满意度等级。本篇文章将深入探讨如何在...

Global site tag (gtag.js) - Google Analytics