【问题标题】:lucene custom scoringlucene 自定义评分
【发布时间】:2012-05-15 20:19:38
【问题描述】:

有一个文档已经编入索引,在搜索时我必须将该文档分成两部分:第一部分由前 100 个单词(标记)组成,文档的其余部分代表第二部分。我必须像这样给这两个部分打分:第二部分 70%第一部分 30%

编辑 2: 所以我尝试创建一个使用 SpanPositionRangeQuery 的搜索器,但我必须完全理解 SpanQuery 的用法,因为我无法获得任何命中(我使用 lukeall 来验证单词 i正在搜索被索引)。有人可以帮帮我吗?

public static void search(String indexDir, String q) throws Exception
{

    Directory dir = FSDirectory.open(new File(indexDir), null);
    IndexSearcher is = new IndexSearcher(dir);

    Term term = new Term("Field", q);
    SpanPositionRangeQuery spanQuery = new SpanPositionRangeQuery(new SpanTermQuery(term), 0, 100);
    spanQuery.setBoost(0.3f);CustomRomanianAnalyzer(Version.LUCENE_35));

    long start = System.currentTimeMillis();
    TopDocs hits = is.search(spanQuery, 10);
    //TopDocs hits = is.search(query, 10);
    long end = System.currentTimeMillis();

    System.err.println("I found " + hits.totalHits + " documents (in " +
            (end - start) + " milliseconds) '" +
            q + "':");

    for (int i=0;i<hits.scoreDocs.length;i++)
    {
        ScoreDoc scoreDoc = hits.scoreDocs[i];
        Document doc = is.doc(scoreDoc.doc);
        System.out.println(doc.get("filename"));
    }

    is.close();
}

我不知道如何将查询解析器与 SpanPositionRangeQuery 结合起来得到我需要的东西......

【问题讨论】:

    标签: java lucene


    【解决方案1】:

    是的,这可以通过为 BooleanQuery 中的每个子句设置提升来完成。使用单独的字段会起作用,但不是绝对必要的。 Lucene 有一个SpanPositionRangeQuery 适合搜索文档的一部分。

    <SpanPositionRangeQuery: spanPosRange(field:term, 0, 100)^0.3>
    

    【讨论】:

    • 我试图这样做,但我不知道如何将查询与解析器链接起来。我用我试过的代码编辑了我的问题。
    猜你喜欢
    • 2016-09-12
    • 2013-04-17
    • 1970-01-01
    • 2015-01-27
    • 2016-02-01
    • 2011-08-20
    • 2014-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多