Java Lucene:具有权重的文档字段

Java Lucene:具有权重的文档字段,java,boost,lucene,Java,Boost,Lucene,我想使用Lucene将文档与大量加权标记(权重为真实概率)一起索引。这些字段都将被称为“标记”,以允许针对这些标记进行搜索,并返回具有匹配标记但概率最高的文档 下面的代码只显示了我想做什么来让它更清楚 但是,Lucene中的字段增强是要应用于索引字段和字段类型,而不是添加到文档中的实例。这意味着,下面的解决方案不起作用,我需要使用具有唯一名称的字段才能对其应用boosting 我也知道这是一个非常糟糕的解决方案,我想知道这里是否有人知道更好的方法。我显然需要a)存储概率,b)在检索过程中使用它们

我想使用Lucene将文档与大量加权标记(权重为真实概率)一起索引。这些字段都将被称为“标记”,以允许针对这些标记进行搜索,并返回具有匹配标记但概率最高的文档

下面的代码只显示了我想做什么来让它更清楚

但是,Lucene中的字段增强是要应用于索引字段和字段类型,而不是添加到文档中的实例。这意味着,下面的解决方案不起作用,我需要使用具有唯一名称的字段才能对其应用boosting

我也知道这是一个非常糟糕的解决方案,我想知道这里是否有人知道更好的方法。我显然需要a)存储概率,b)在检索过程中使用它们

private void indexDocuments(IndexWriter writer) throws IOException {

    Document docA = new Document();
    Field pathFieldA = new StringField("path", "dog.jpg", Field.Store.YES);
    docA.add(pathFieldA);
    // add all tags to the index
    StringField c1 = new StringField("tag", "dog", Field.Store.YES);
    c1.setBoost(0.8f);
    docA.add(c1);
    StringField c2 = new StringField("tag", "cat", Field.Store.YES);
    c2.setBoost(0.2f);
    docA.add(c2);

    Document docB = new Document();
    Field pathFieldB = new StringField("path", "cat.jpg", Field.Store.YES);
    docB.add(pathFieldB);
    // add all tags to the index
    StringField tagB1 = new StringField("tag", "dog", Field.Store.YES);
    tagB1.setBoost(0.2f);
    docB.add(tagB1);
    StringField tagB2 = new StringField("tag", "cat", Field.Store.YES);
    tagB2.setBoost(0.8f);
    docB.add(tagB2);

    writer.addDocument(docB);
    writer.addDocument(docB);
}

可能重复使用Lucene有效载荷将术语提升粘贴到索引中(请参阅重复标记问题)。如果您的术语提升将随着时间的推移而改变,那么您需要通过在数据库或HashMap中查找术语提升来执行查询时间提升。查询时间提升是评分公式中的
t.getBoost()