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

Umbraco 10 Examine搜索:如何同时匹配页面标题与内容?

解决Umbraco搜索无法匹配页面内容的问题

问题排查与修正

1. 修复代码中的语法错误与逻辑问题

你的代码存在两处关键问题:

  • 代码片段不完整:var filter = criteria.Field("nodeName", 未完成字段过滤逻辑,且这行代码会覆盖之前包含content字段的查询条件,导致实际只按nodeName搜索。
  • 未正确应用多字段搜索逻辑,同时缺少网站ID过滤的完整实现。

修正后的代码示例:

public IEnumerable<ResultItem?> SearchUmbraco(string searchTerm, int websiteId)
{
    // 获取外部索引搜索器
    if (!_examineManager.TryGetIndex("ExternalIndex", out var externalIndex))
        return Enumerable.Empty<ResultItem?>();

    var examineSearcher = externalIndex.Searcher;
    if (examineSearcher == null)
        return Enumerable.Empty<ResultItem?>();

    // 构建多字段搜索条件:同时匹配nodeName和content字段
    var query = examineSearcher.CreateQuery("content")
        .GroupedOr(new[] { "nodeName", "content" }, searchTerm)
        // 添加网站ID过滤,替换成你实际存储网站ID的字段名
        .Field("websiteId", websiteId.ToString());

    // 执行搜索
    var results = query.Execute();

    // 转换结果并过滤无效项
    var content = results.Select(x => ConvertToResult(int.Parse(x.Id), websiteId, x.Score))
        .Where(x => x != null)
        .ToList();

    return content.OrderByDescending(x => x.Score);
}

2. 验证BlockList内容的索引状态

确保BlockList的内容已正确被索引到content字段中:

  • 检查你引入的BlockList索引代码,确认是否将BlockList的内容合并写入了content字段。
  • 使用Umbraco后台的Examine管理工具,查看索引文档的content字段值,确认是否包含BlockList中的文本内容。

3. 确认字段配置

确保content字段已在Examine的索引配置中被设置为可搜索、可存储:

  • 检查ExternalIndex的配置文件,确保content字段被添加到索引字段列表中,且设置了正确的分析器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 20:34:59