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

时间:2014-05-25 21:39:55

标签: lucene

我想让文档中的第一个n(我设置)单词比Lucene中的其他文档更重要。我该怎么做?我发现了一些关于提升的东西,但是提升领域更重要。我的文件应该是唯一的领域。 是在索引时对单词进行编号并为其提供解决方案吗?这样的事情:

TextField myField = new TextField("text",termAtt.toString(),Store.YES);

myField.setBoost(2);

document.add(myField);

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

1 个答案:

答案 0 :(得分:3)

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

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);