You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在RavenDB v4中获取查询匹配文本?附旧版本实现示例

在RavenDB v4中实现查询匹配文本高亮的方法

在RavenDB 4.x及后续版本中,查询高亮功能的API进行了重构,不再使用旧版本的FieldHighlightings类和out参数模式,而是通过更直观的方式获取高亮结果。以下是和你原有代码逻辑对齐的实现示例:

基于DocumentQuery的实现

// 执行查询并配置高亮
var hits = session
    .Advanced
    .DocumentQuery<FAOCRPage>("Standard/Lucene")
    .Statistics(out var stats)
    .Highlight(x => x.OCR, 50, 5) // 指定高亮字段、单片段长度、最大片段数量
    .SetHighlighterTags("**", "**") // 设置高亮前后标签,和旧版本用法一致
    .Skip(pageNum * pageSize)
    .Take(pageSize)
    .Search(x => x.OCR, queryStr, escapeQueryOptions: EscapeQueryOptions.RawQuery)
    .ToList();

// 获取所有高亮结果
var highlightings = session.Advanced.GetHighlightings();

// 遍历结果,提取每个文档的匹配片段
foreach (var hit in hits)
{
    // 根据文档ID和字段名获取对应的高亮片段
    string[] fragments = highlightings.GetFragments(hit.Id, nameof(FAOCRPage.OCR));
    // 这里可以对fragments进行后续处理,比如展示给用户
}

基于LINQ Query的实现(可选)

如果你更习惯使用LINQ风格的查询,也可以这样写:

var query = session.Query<FAOCRPage>("Standard/Lucene")
    .Statistics(out var stats)
    .Highlight(x => x.OCR, 50, 5, tags: ("**", "**")) // 直接在Highlight方法中指定标签
    .Skip(pageNum * pageSize)
    .Take(pageSize)
    .Search(x => x.OCR, queryStr, escapeQueryOptions: EscapeQueryOptions.RawQuery);

var hits = query.ToList();
var highlightings = session.Advanced.GetHighlightings();

// 同样的方式提取片段
foreach (var hit in hits)
{
    var fragments = highlightings.GetFragments(hit.Id, nameof(FAOCRPage.OCR));
}

关键变化说明

  • 不再需要通过out参数传递FieldHighlightings对象,查询执行后通过session.Advanced.GetHighlightings()统一获取所有高亮数据
  • 使用GetFragments方法,通过文档ID和字段名称来精准获取对应文档的匹配片段
  • 高亮标签的配置可以通过SetHighlighterTags(DocumentQuery)或者Highlight方法的tags参数(LINQ Query)来设置,逻辑和旧版本一致
  • 如果需要对多个字段开启高亮,只需多次调用Highlight方法即可,后续分别获取对应字段的片段即可

内容的提问来源于stack exchange,提问作者user7064696

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:40:31