java - lucene自定义评分

标签 java lucene

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

编辑2:所以我尝试创建一个使用SpanPositionRangeQuery的搜索器,但我一定理解了SpanQuery的用法都是错误的,因为我无法得到任何命中(我使用lukeall来验证单词是否是我的)正在搜索并已编入索引)。有人可以帮我吗?

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 结合起来以获得我需要的...

最佳答案

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

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

关于java - lucene自定义评分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10608263/

相关文章:

solr - 如何将搜索索引与 MVC 中的模型相关联?

python - 请求错误: TransportError(400, 'parse_exception', 'No processor type exists with name[attachment]')

java - 在 Lucene 索引中搜索特定术语

java - 什么lucene分析器可以用来处理日语文本?

java - hibernate 搜索 : configure Facet for custom FieldBridge

java - 如何在静态同步块(synchronized block)内进行线程间通信

java - 验证 dto spring boot 中的三个字段中的至少一个

java - 应用程序更新时运行扩展的 Application.class

java - 通过单击按钮创建变量

java - Android - FirebaseListAdapter 以相反的顺序?