如何使前n个单词在Lucene中更重要

  • 本文关键字:Lucene 何使前 单词 lucene
  • 更新时间 :
  • 英文 :


我想让文档中的前n个(我设置的)单词比Lucene文档的其余部分更重要。我该怎么做呢?我发现了一些关于提升的东西,但提升一个领域更重要。我的文档应该是一个唯一的字段。在索引时对单词进行编号并提升它们是一种解决方案吗?像这样:

TextField myField = new TextField("text",termAtt.toString(),Store.YES);
myField.setBoost(2);
document.add(myField);

如果我没有到达文档中的第n个单词?我想得到以下结果:假设文档中的前20个单词比其他单词更重要。我有两个相同的文档,有超过20个单词,我添加我在一个文档中搜索的单词作为第一个单词,在第二个文档中搜索的单词作为最后一个单词,我希望第一个文档有更大的分数。

最好的方法是简单地创建两个不同的字段,一个包含文本的较高值部分(这不需要存储),下一个包含全文:

int leadinLength = 20
TextField myFieldLeadin = new TextField("text_leadin",termAtt.toString().substring(leadinLength,Store.NO);
TextField myField = new TextField("text, termAtt.toString(),Store.YES);
myFieldLeadin.setBoost(2);
document.add(myFieldLeadin);
document.add(myField);

如果需要,可以使用MultiFieldQueryParser来同时简化两个字段的搜索,例如:

Query query = MultiFieldQueryParser.parse(Version.LUCENE_48, "my search query",{"text_leadin","text"}, analyzer);
TopDocs docs = searcher.search(query, 10);

最新更新