【发布时间】:2018-03-28 23:44:17
【问题描述】:
有没有人使用 EPiServer 的弹性搜索客户端 Vulcan? (https://github.com/TCB-Internet-Solutions/vulcan)
所有帐户(包括这个写得很好:https://blog.wsol.com/getting-started-using-vulcan-search-in-episerver)都应该像从 EPiServer NuGet 源安装 NuGet 包“TcbInternetSolutions.Vulcan.Core”一样简单,添加 web.config 设置,然后运行计划的作业来索引数据。
我将 NuGet 包(版本 3.0.1)安装到我的 EPiServer 项目(版本 11.2.1)中并设置我的 web.config 设置和索引作业报告“作业已完成。请刷新页面以查看状态。”运行历史记录显示“Vulcan 在 1 个索引器中成功索引了 100 个项目!”。
但是,当我查看“\App_Data\EPiServerErrors.log”文件时,我看到了大量错误,例如:
错误 TcbInternetSolutions.Vulcan.Core.Implementation.VulcanClient:Vulcan 无法使用内容链接 10 为语言 en 编制索引内容:System.Exception:无效的 NEST 响应构建自对 PUT 的不成功的低级调用:/customername_en/EPiServer.Core .BlockData/10 此 API 调用的审计跟踪: - [1] 错误响应:节点:http://localhost:9200/ 接受:00:00:00.4026489 ServerError:ServerError:400Type:mapper_parsing_exception 原因:“未能找到为 [contentAssetsID] 解析的类型 [string]” OriginalException:System.Net.WebException:远程服务器返回错误:(400)错误请求。 在 System.Net.HttpWebRequest.GetResponse() 在 C:\Projects\elastic\net-2\src\Elasticsearch.Net\Connection\HttpConnection.cs:line 163 中的 Elasticsearch.Net.HttpConnection.Request[TReturn](RequestData requestData) 处
看起来它无法在索引“customername_en”中索引类型“EPiServer.Core.BlockData”,因为当“[contentAssetsID]”应该是数字时,所有内容都默认映射到字符串。所以我尝试添加一个初始化类来将映射设置为 AutoMap:
[ModuleDependency(typeof(ServiceContainerInitialization))]
public class SearchInitialization : IConfigurableModule
{
public void ConfigureContainer(ServiceConfigurationContext context)
{
// Nothing to do
}
public void Initialize(InitializationEngine context)
{
var vh = ServiceLocator.Current.GetInstance<VulcanHandler>();
var vhClient = vh.GetClient(new System.Globalization.CultureInfo("en"));
var res = vhClient.Map<EPiServer.Core.BlockData>(m => m.AutoMap());
}
public void Uninitialize(InitializationEngine context)
{
// Nothing to do
}
}
"res" 返回一个成功的响应,但错误仍然存在。
此处的完整错误:https://pastebin.com/T7NPgZj9
请帮忙!
【问题讨论】:
-
您使用的是哪个版本的 Elastic Search?
标签: c# elasticsearch episerver