`
sealbird
  • 浏览: 603821 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

lucene搜索结果排序之Payload

阅读更多
提高特定词汇的评分

利用 Payload 功能,可以提高文档中特定词汇的评分,如黑体词汇、斜体词汇等,从而优化搜索结果排序。

下面还以文档 D0 和 D1 为例说明如何设置和检索 Payload。其中GPRS为专业术语,但search “GPRS描述”的时候,返回的D1的得分比D0高。但这不是我们想要的结果,我们可能想要D0得分高一些,这时可在incrementToken中,自定义词的权重(例如术语权重高些),然后在重写Similarity,自定义score。

D0 = "GPRS的问题"
D1 = "问题描述"
Step1:在 Analyzer 处理过程中,为特殊词汇添加评分 Payload  
ICTCLASTokenizer.java 
/**
     * @see org.apache.lucene.analysis.TokenStream#incrementToken()
     */
    @Override
    public boolean incrementToken() throws IOException {
        clearAttributes();
        
        Word lexeme = segmentation.next();
        if (lexeme == null)
            return false;

        termAttr.setTermBuffer(lexeme.getText());
        offsetAttr.setOffset(lexeme.getStartPosition(), lexeme.getEndPosition());

        /*
         * 有词性,就存进payload
         */
        String payloadText = "";
        if (needPOSTagged && !StringUtils.isEmpty(lexeme.getPartOfSpeech()))
            payloadText = lexeme.getPartOfSpeech();

        /*
         * 该词为指定关键字或者术语,就存进payload
         */
        float keyweight = gmccKeyWordDeal.doDeal(lexeme.getText());
        if(keyweight > 0)
            payloadText = payloadText + "_" + keyweight;
        
        if(!payloadText.equals(""))
            payloadAttr.setPayload(new Payload(payloadText.getBytes()));

        finalOffset = lexeme.getEndPosition();

        return true;
    }
 

Step2:重写 Similarity (主要负责排名和评分)

BwSimilarity.java

public class BwSimilarity extends DefaultSimilarity {

    private static final long serialVersionUID = -8049061435299914513L;

    public BwSimilarity() {
        super();
    }

    @Override
    public float scorePayload(int docId, String fieldName, int start, int end,
            byte[] payload, int offset, int length) {
        
        String payloadStr = "";
        try {
            payloadStr = new String(payload, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            return 1;
        }
        
        // 获取设定的keyweight,默认为1
        String kwStr = "1";
        int kwIndex = payloadStr.indexOf("_");
        if(kwIndex != -1)
            kwStr = payloadStr.substring(kwIndex + 1);
        
        return Float.parseFloat(kwStr);
    }

    @Override
    public float coord(int overlap, int maxOverlap) {
        float overlap2 = (float)Math.pow(2, overlap);
        float maxOverlap2 = (float)Math.pow(2, maxOverlap);
        return (overlap2 / maxOverlap2);
    }
    
}


Step3:使用重写的 boostingSimilarity 进行检索

PayloadTermQuery ptq = new PayloadTermQuery(new Term(field, term),new AveragePayloadFunction());

Searcher searcher = new IndexSearcher(…);
Searcher.setSimilarity(boostingSimilarity);
…
ScoreDoc[] hits = searcher.search(ptq , hitsPerPage).scoreDocs;




相关链接:

Lucene Payload 的研究与应用:http://www.ibm.com/developerworks/cn/opensource/os-cn-lucene-pl/index.html
分享到:
评论

相关推荐

    Lucene5学习之TermVector项向量

    2. **相关性排序**:结合TF-IDF等算法,利用词项频率和文档频率来评估查询与文档的相关性,从而优化搜索结果的排序。 3. **信息检索**:在信息检索系统中,TermVector可以帮助计算文档之间的相似度,实现如余弦...

    lucene原理分析

    它是影响搜索结果排序的关键因素之一。 #### 二、索引结构 Lucene中的索引由多个组成部分构成,下面详细介绍这些组成部分: 1. **域元数据信息**:包括以下属性: - **fnmIndexed**:表示是否对该字段进行索引。...

    支持pyramid2.x的kotti web代码

    Kotti 是一个基于 Pyramid 框架的 Python 内容管理系统(CMS),适合用来搭建中小型网站、文档库、企业展示平台、知识库等需要灵活内容结构和权限模型的项目。它本身更像一个可以二次开发的 CMS 框架,比 WordPress、Drupal 这类“一装就用”的系统更倾向于开发者定制和扩展。 这是支持pyramid2.x版本的kotti! tar -xzvf kotti1.0.tar.gz 解压缩 进入目录执行 pip install -e . 来安装, 然后执行pserve app.ini 启动。 用浏览器浏览127.0.0.1:5000 即可浏览。 用户名admin ,口令qwerty

    cmd-bat-批处理-脚本-hello world.zip

    cmd-bat-批处理-脚本-hello world.zip

    知识付费系统自动采集V3.0 跳转不卡顿+搭建教程

    知识付费系统自动采集V3.0 跳转不卡顿+搭建教程,不和外面的一样跳转卡顿,这个跳转不卡顿,支持三级分销。

    基于Matlab实现图像形状纹理颜色特征提取

    在Matlab环境下,对图像进行特征提取时,主要涵盖形状、纹理以及颜色这三大关键特征。其中,对于纹理特征的提取,采用灰度梯度共生矩阵这一方法来实现。通过灰度梯度共生矩阵,可以有效地捕捉图像中像素灰度值之间在不同方向和距离上的相互关系,进而量化地反映出图像的纹理特性,为后续的图像分析、分类等任务提供重要的纹理信息依据。

    实证数据-2010-2023年上市公司-管理层情感语调数据-社科经管.rar

    该数据集为2010-2023年中国A股上市公司管理层情感语调的年度面板数据,覆盖45,320条样本,数据源自年报及半年报的"管理层讨论与分析"部分。通过构建中文金融情感词典(融合《知网情感分析用词典》与L&M金融词汇表),采用文本分析方法计算情感语调指标,包括:正面/负面词汇数量、文本相似度、情感语调1((积极词-消极词)/总词数)和情感语调2((积极词-消极词)/(积极词+消极词))。同时包含盈利预测偏差、审计意见类型等衍生指标,可用于研究信息披露质量、市场反应及代理问题。该数据复刻了《管理世界》《财经研究》等期刊的变量构建方法,被应用于分析语调操纵对债券市场的影响,学术常用度与稀缺度较高。

    cmd-bat-批处理-脚本-FTIME.zip

    cmd-bat-批处理-脚本-FTIME.zip

    1747829038637.png

    1747829038637.png

    2025年自动化X光检查机项目大数据研究报告.docx

    2025年自动化X光检查机项目大数据研究报告.docx

    基于Logisim的原码与补码一位乘法器设计

    在计算机组成原理课程设计中,我全程跟随老师的指导,独立完成了以下两项任务:一是利用Logisim软件进行原码一位乘法器的仿真设计,通过逐步搭建电路、配置逻辑单元,实现了原码乘法运算的完整流程,深入理解了原码乘法的原理和实现机制;二是完成了补码一位乘法器的Logisim仿真,同样按照老师讲解的步骤,精心设计电路,确保补码乘法运算的正确性,进一步掌握了补码乘法的运算规则和电路实现方法。通过这两个项目,我不仅巩固了理论知识,还提升了动手实践能力和逻辑思维能力。

    cmd-bat-批处理-脚本-msvc2017.zip

    cmd-bat-批处理-脚本-msvc2017.zip

    cmd-bat-批处理-脚本-virtualcam-install.zip

    cmd-bat-批处理-脚本-virtualcam-install.zip

    二十四节气之立秋介绍.pptx

    二十四节气之立秋介绍.pptx

    cmd-bat-批处理-脚本-shift.zip

    cmd-bat-批处理-脚本-shift.zip

    二十四节气之小雪介绍.pptx

    二十四节气之小雪介绍.pptx

    java、SpringBoot面试专题,6页面试题

    java、SpringBoot面试专题,6页面试题

    cmd-bat-批处理-脚本-GenerateUnionWinMD.zip

    cmd-bat-批处理-脚本-GenerateUnionWinMD.zip

    二十四节气之大暑节气.pptx

    二十四节气之大暑节气.pptx

    python实现五子棋游戏源码

    python实现五子棋游戏源码

Global site tag (gtag.js) - Google Analytics