相关度排序

相关度排序

1.1 什么是相关度排序

相关度排序是查询结果按照与查询关键字的相关性进行排序,越相关的越靠前。比如搜索Lucene”关键字,与该关键字最相关的文章应该排在前边。

 1.2 相关度打分

Lucene对查询关键字和索引文档的相关度进行打分,得分高的就排在前边。如何打分呢?Lucene是在用户进行检索时实时根据搜索的关键字计算出来的,分两步:

1计算出词(Term)的权重

2根据词的权重值,计算文档相关度得分。

 什么是词的权重?

通过索引部分的学习,明确索引的最小单位是一个Term(索引词典中的一个词),搜索也是要从Term中搜索,再根据Term找到文档,Term对文档的重要性称为权重,影响Term权重有两个因素:

Term Frequency (tf)

指此Term在此文档中出现了多少次。tf越大说明越重要。

(Term)在文档中出现的次数越多,说明此词(Term)对该文档越重要,如“Lucene”这个词,在文档中出现的次数很多,说明该文档主要就是讲Lucene技术的。

 Document Frequency (df)

指有多少文档包含次Termdf越大说明越不重要。

比如,在一篇英语文档中,this出现的次数更多,就说明越重要吗?不是的,有越多的文档包含此词(Term),说明此词(Term)太普通,不足以区分这些文档,因而重要性越低。

1.3 设置boost值影响相关度排序

boost是一个加权值(默认加权值为1.0f),它可以影响权重的计算。

 l 在索引时对某个文档中的field设置加权值高,在搜索时匹配到这个文档就可能排在前边。

l 在搜索时对某个域进行加权,在进行组合域查询时,匹配到加权值高的域最后计算的相关度得分就高。

 设置boost是给域field)或者Document设置的。

1.3.1 在创建索引时设置

如果希望某些文档更重要,当此文档中包含所要查询的词则应该得分较高,这样相关度排序可以排在前边,可以在创建索引时设定文档中某些域(Field)的boost值来实现,如果不进行设定,则Field Boost默认为1.0f一旦设定,除非删除此文档,否则无法改变

 1.3.1.1 代码实现

@Test

public void setBoost4createIndex()throws Exception {

// 创建分词器

Analyzer analyzer = new StandardAnalyzer();

 IndexWriterConfig cfg = new IndexWriterConfig(Version.LUCENE_4_10_3,

analyzer);

Directory directory = FSDirectory.open(new File("E:\\11-index\\0728"));

// 创建IndexWriter对象,通过它把分好的词写到索引库中

IndexWriter writer = new IndexWriter(directory, cfg);

 Document doc = new Document();

Field id = new StringField("id","11", Store.YES);

Field description = new TextField("description","测试设置BOOSTlucene",

Store.YES);

// 设置boost

description.setBoost(10.0f);

// 把域添加到文档中

doc.add(id);

doc.add(description);

writer.addDocument(doc);

// 关闭IndexWriter

writer.close();

}

 1.3.1.2 输出


 1.3.2 在查询索引时设置

MultiFieldQueryParser创建时设置boost


  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值