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

多站点应用中MediaData选择性索引的实现方法咨询

EPiServer多站点MediaData选择性索引实现方案

核心需求:仅对站点标识为abc或xyz的站点下的MediaData内容建立搜索索引,其余站点的MediaData不纳入索引。

修改后的完整代码

[InitializableModule]
[ModuleDependency(typeof(EPiServer.Web.InitializationModule))]
public class FindInitialization : IInitializableModule
{
    // 定义允许索引的站点标识集合
    private readonly HashSet<string> _allowedSiteIdentifiers = new HashSet<string> { "abc", "xyz" };

    public void Initialize(InitializationEngine context) 
    {
        var contentIndexer = ServiceLocator.Current.GetInstance<ContentIndexer>();
        var siteDefinitionResolver = ServiceLocator.Current.GetInstance<ISiteDefinitionResolver>();

        // 全局配置MediaData的索引规则
        contentIndexer.Conventions.ForInstancesOf<MediaData>()
            .ShouldIndex(media => IsMediaInAllowedSite(media, siteDefinitionResolver));
    }

    private bool IsMediaInAllowedSite(MediaData media, ISiteDefinitionResolver siteDefinitionResolver)
    {
        // 根据MediaData的内容链接,获取其所属的站点定义
        var siteDefinition = siteDefinitionResolver.GetSiteDefinitionForContent(media.ContentLink);
        
        // 判断站点标识是否在允许列表中
        return siteDefinition != null && _allowedSiteIdentifiers.Contains(siteDefinition.Name);
    }

    public void Uninitialize(InitializationEngine context) { }
}

关键逻辑说明

  • 允许站点集合:使用HashSet<string>存储目标站点标识,确保判断操作的高效性。
  • 站点归属判断:通过EPiServer官方提供的ISiteDefinitionResolver.GetSiteDefinitionForContent方法,根据MediaData的ContentLink精准定位其所属站点,这是判断内容与站点关联的标准方式。
  • 索引规则配置:一次性全局配置MediaData的索引判断逻辑,只有当内容所属站点标识在允许列表内时,才会被纳入搜索索引。

原代码问题修正

原代码中循环遍历站点并重复设置ShouldIndex(p => true),会导致全局索引规则被多次覆盖,最终所有MediaData都会被索引,无法实现站点过滤。修改后的方案通过在索引判断逻辑中直接关联内容所属站点,一次性完成全局规则配置,精准满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 14:47:19