我有一个渲染组件,它使用 Lucene 索引运行搜索来填充自身。
我们定义了两个索引;大师和网络。在体验编辑器中,它使用主索引和实际站点的 Web 索引。
我们已将 Web 索引策略配置为 onPublishEndAsync
,我们已经将主索引策略配置为 syncMaster
,其想法是 CMS 用户可以添加/编辑支持该组件的 Sitecore 项目,并立即在体验编辑器中查看它们。
但是,随着我们在 Sitecore 中更改数据,主索引似乎并未更新。体验编辑器仅在我手动运行索引重建后显示数据。
<strategies hint="list:AddStrategy">
<strategy ref="contentSearch/indexConfigurations/indexUpdateStrategies/syncMaster" />
</strategies>
为什么索引不会在数据更改时自行更新?
更新
因此,我将建议的文件与全新安装进行了比较,它们是相同的。
我应该补充一点,我没有使用标准
sitecore_master_index
.我们有多个站点运行同一个 sitecore 实例,因此我们为 websitename_master_index
添加了一个配置包含.我已经在 <index>
中比较了这个配置节点反对 sitecore_master_index
在 Sitecore.ContentSearch.Lucene.Index.Master.config
唯一的区别是爬虫的 <root>
元素指向特定的站点内容节点,加上我们添加了一些自定义字段,但我认为这些字段不会引起问题,我们可以手动重建索引吗?我在查看
showconfig.aspx
时发现的另一件有趣的事情这是:<agent type="Sitecore.ContentSearch.Tasks.Optimize" method="Run" interval="12:00:00" patch:source="Sitecore.ContentSearch.config">
<indexes hint="list">
<index>sitecore_master_index</index>
</indexes>
</agent>
我不确定这是否有任何意义,但是我们的自定义
websitename_master_index
没有匹配的条目?更新
我还向爬虫添加了调试级别日志记录
在 crawling.log 我只看到以下内容:
14416 08:55:10 INFO [Index=website_master_index] Initializing SitecoreItemCrawler. DB:master / Root:/sitecore/Content/Website/Home
14416 08:55:10 INFO [Index=website_master_index] Initializing SynchronousStrategy.
在编辑和保存项目时,日志中没有进一步提及索引,而标准
sitecore_master_index
确实如此。我们没有改变配置?
最佳答案
为了保证Lucene文件不被并发修改,Lucene增加了一个.lock
文件概念 - 无论进程要写入,都必须创建文件。
如果已经有一个 - 等待它被删除。
如果一个 writer 进程被终止,文件永远不会被删除,因此索引永远不会被更新。
解决方案是手动清理文件夹。
为了做出更好的预测,需要进程的内存快照来查看内部发生的事情(或 does each thread do )。
关于lucene - Sitecore syncMaster 索引策略不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35774317/