提高特定词汇的评分
利用 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
分享到:
相关推荐
默认情况下,Lucene 搜索结果是按照文档的相关性(即查询评分)进行排序的。这个评分是通过 TF-IDF(词频-逆文档频率)算法计算得出的,它反映了文档中关键词出现的频率以及在整个文集中的稀有程度。 然而,有些...
Lucene 排序算法是搜索引擎中的核心组件之一,负责将搜索结果按照相关度排序以便用户快速找到所需信息。 Lucene 的排序算法主要基于 tf-idf 模型,以下是 Lucene 排序算法的详细介绍: 1. tf(Term Frequency):...
Lucene 的排序是指根据某个字段的值对搜索结果进行排序。 Lucene 提供了多种排序方式,包括升序和降序排序。可以使用 Sort 对象来指定排序字段和排序方式。 例如,下面的代码演示如何使用 Lucene 对搜索结果进行...
首先,Lucene的核心功能之一就是提供高效的全文检索能力,但默认的搜索结果排序通常是基于相关度得分(Relevance Score),这是由TF-IDF算法计算得出的。然而,在实际应用中,我们往往需要根据其他因素(如时间、...
- **高亮显示**:Lucene支持高亮搜索关键词,将匹配的关键词在搜索结果中突出显示,使用户更容易找到相关信息。 3. 分页: - 分页通常通过设置页码和每页记录数来实现。在查询时,通过偏移量(offset)和记录数...
它提供了强大的文本分析、索引和搜索功能,而排序作为搜索结果的重要组成部分,是Lucene的一个核心特性。本文将深入探讨Lucene如何根据关键词出现次数进行排序,以及如何实现自定义排序,包括处理`List<Map>`字段的...
Lucene 是一个流行的全文搜索引擎库,其结果排序是通过复杂的算法来实现的,旨在提供最相关的搜索结果。这一过程基于信息检索系统的“相关排序”概念,即根据文档与查询之间的相关性来排列搜索结果。 **向量空间...
在IT领域,Lucene是一个非常著名的全文搜索引擎库,由Apache软件基金会开发。...通过对地理位置数据的有效处理和排序,开发者能够为用户提供更精确、更具相关性的搜索结果,从而提升应用的整体价值。
SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...
“Lucene5学习之排序-Sort”这个标题表明了我们要探讨的是关于Apache Lucene 5版本中的排序功能。Lucene是一个高性能、全文检索库,它提供了强大的文本搜索能力。在这个主题中,我们将深入理解如何在Lucene 5中对...
**SpringBoot+Lucene搜索结果高亮显示** 在现代Web应用程序中,强大的全文搜索引擎功能是不可或缺的,而Apache Lucene正是这样一个高效的、可扩展的开源全文检索库。在这个SpringBoot+Lucene的Demo中,我们将深入...
SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...
排序是Lucene中的一项核心功能,允许我们根据文档的某个或多个字段来对搜索结果进行定制化排序。Lucene支持两种类型的排序:基于评分(Score Sorting)和基于字段(Field Sorting)。基于评分的排序默认按照相关性...
在Lucene搜索引擎中,Java用于处理后台逻辑,如构建索引、执行搜索查询以及处理搜索结果。Java类负责与Lucene API交互,实现索引的创建、更新和读取,以及执行复杂查询。 **4. 搜索引擎实现** - **索引构建**: 使用...
《Lucene搜索引擎开发权威经典》是由于天恩编著的一本深入探讨Lucene搜索引擎开发的专业书籍,这本书结合源码分析,旨在帮助读者掌握Lucene的核心技术和应用实践。Lucene是Apache软件基金会的一个开放源代码项目,它...
总结来说,Lucene搜索引擎的基本工作原理包括建立倒排索引、处理用户查询以及返回相关性最高的结果。同时,Lucene还支持与目录索引的集成,适应各种搜索场景。通过理解这些原理,开发者可以更好地利用Lucene构建高效...
5. **搜索结果相关性** Lucene通过TF-IDF(Term Frequency-Inverse Document Frequency)算法计算文档的相关性。TF-IDF评估一个词项在文档中的重要性,从而帮助确定哪些文档更相关。 6. **扩展与应用** 虽然...
5. **结果排序(Resuliting Sorting)**: 按照评分从高到低排序搜索结果,返回给用户。 ### 三、使用Lucene进行站内搜索 1. **集成Lucene**: 在项目中引入Lucene库,创建索引目录,并实例化IndexWriter用于写入...