我们正在使用Sitecore 6.5和Lucene进行搜索。
我正在尝试使用索引查看器重建索引,但我收到错误:
发生错误
System.InvalidOperationException:Item的模板为null。在 Sitecore.Search.Crawlers.DatabaseCrawler.GetAllTemplates(Item item)
但我不知道如何找到哪个项目没有模板...
答案 0 :(得分:2)
您已经遇到了sitecore数据库中不应存在的内容。找到我相信的项目的最佳方法是打开SQL Management Studio并在master数据库上使用以下查询:
select * from items where templateid not in (select id from items)
答案 1 :(得分:0)
您可以在日志中找到它,具体取决于您的日志记录设置。 Crawler调用Item.Template,它应该记录模板,项目和数据库
if (templateItem == null)
Sitecore.Diagnostics.Log.SingleError(string.Format("Data template '{0}' not found for item '{1}' in '{2}' database
答案 2 :(得分:0)
你可以像上面提到的那样查询items表,如果你没有SQL服务器的访问权限,我认为sitecore解决方案在你的机器上并且你有连接字符串? 写一个小应用程序然后为你运行查询。
var itemIds = (from i in dbContext.items select i.id).ToList();
var orphanItems = (from oi in dbContext.items where !itemIds.Contains(i.templateId) select oi).ToList();
答案 3 :(得分:0)
请参阅下面给出的网址,我认为它会解决您的问题
http://sitecorebasics.wordpress.com/2013/12/16/template-item-id-not-found-for-item-pathpath/
答案 4 :(得分:-1)
只需在项目中调试索引文件,最好的调试方法是
每当您发布自动重建的站点或项目索引或重建索引的时间时,请将断点放在索引文件中并查看确切的问题
这是示例代码
protected override void AddAllFields(Document document, Item item, bool versionSpecific)
{
}
<index id="Index name" type="Sitecore.Search.Index, Sitecore.Kernel">
<param desc="name">$(id)</param>
<param desc="folder">__GermanUrl</param>
<Analyzer ref="search/analyzer" />
<locations hint="list:AddCrawler">
<customSearch type="BusinessModul.UrlIndexer,BusinessModule">
<Database>web</Database>
<Root>/sitecore/content/</Root>
<Boost>2.0</Boost>
<IndexAllFields>false</IndexAllFields>
<include hint="list:IncludeTemplate">
<includeTemplate>template id</includeTemplate>
</include>
</customSearch>
</locations>
</index>