使用 SearchModuleBase 将 Ajax 内容集成到 DNN 搜索索引中的自定义模块中?

Integrate Ajax content in your custom module in DNN's Search Index using SearchModuleBase?

我们有一个自定义产品详细视图模块,当 URL 中的查询字符串包含特定 SKU 并从产品过滤器模块页面导航时,该模块将检索产品数据。当加载详细产品视图模块时,它将检查查询字符串并通过 Ajax.

加载数据

我想集成 DNN 的 SearchModuleBase,以便自定义模块数据显示在我们的自定义搜索结果模块中。

我看过 SearchModuleBase Wiki 和简介:http://www.dnnsoftware.com/wiki/modulesearchbase

http://www.dnnsoftware.com/community-blog/cid/154913/integrating-with-search-introducing-modulesearchbase

如何指定我希望 DNN 的爬虫索引的确切内容? 例如:SKU、页面标题、产品描述?

我还想知道您如何提交产品 Object 的元关键字作为 code-behind 中的标签,可用于搜索结果?

我查看过的所有网站都使用旧的 ISearchable class:http://www.adefwebserver.com/dotnetnukehelp/ISearchable/

这是我目前的代码,但我认为它太基础了,没有指定产品描述、SKU 和页面标题:

   public class ProductDetailedViewModuleBase : ModuleSearchBase
        {
            public override IList<SearchDocument> GetModifiedSearchDocuments(ModuleInfo moduleInfo, DateTime beginDateUtc)
            {
                throw new NotImplementedException();
            }
        }

我已将清单文件更改为可搜索。我必须将 ISearchable、IPortable 和 IUpgradeable 更改为 Searchable、Portable 和 Upgradeable。

我也在尝试添加 SearchModuleBase 但我遗漏了一些东西:

这是生成产品信息的前端代码:

您在清单中指定为 businessControllerClass 的完全限定 class 和命名空间是实现 ModuleSearchBase 的那个。

我应该看到这样的东西:

namespace MyModule.Modules.ProductDetailedView.Components
{
    public class FeatureController : ModuleSearchBase
    {
        public override IList<SearchDocument> GetModifiedSearchDocuments(ModuleInfo moduleInfo, DateTime beginDateUtc)
        {
            // TODO: convert your Product info object list to a SearchDocument object list and return
        }
    }
}

编译并实施此方法后,您可以转到“设置”>“计划”和运行 "Site Crawler" 计划任务。将您的调试器附加到 DNN 进程,当任务执行时,您的 GetModifiedSearchDocuments 方法应该被命中。

有关此主题的包含示例代码的完整教程,您可以订阅 dnnhero.com and check out my complete search tutorial

GetModifiedSearchDocuments 的代码存根就是这样。它没有完全实施。您必须用代码替换 throw new NotImplementedException() 以填充您将 return 的 SearchDocument 个对象的列表。 SearchDocument 的属性是您为希望爬虫索引的数据分配值的地方。

 public override IList<SearchDocument> GetModifiedSearchDocuments(ModuleInfo moduleInfo, DateTime beginDateUtc)
 {
     var searchDocs = new List<SearchDocument>();
     var productList = GetProductList();  //you write this method to return a list of your products
     foreach(var product in productList)
     {
         var searchDoc = new SearchDocument
         {
             IsActive = true,
             CultureCode = moduleInfo.CultureCode,
             ...
             Title = product.YourProductName,
             Description = product.YourProductDescription,
             Body = product.YourProductDescription,
         };
         searchDocs.Add(searchDoc);
     }
     return searchDocs;
 }

你说的部分:

I am also trying to add the SearchModuleBase, but I am missing something

我不确定您要完成什么,但您不需要在那里进行任何更改即可获得您的自定义内容索引。