我在Azure上的App Service中托管的Umbraco 7.5.6网站上遇到了一个问题,其中索引似乎在非特定时间后被删除。
我们将信息(包括一些自定义字段)存储在外部检查索引中的已发布新闻文章中,以便从索引中查询故事。这是由面向客户的搜索API消耗的。
最初,我们认为这可能是由Azure交换服务器引起的,因此从ExamineSettings.config下的路径中删除了{computerName}参数。但是,这似乎没有任何效果。
我们当前的索引路径为~/App_Data/TEMP/ExamineIndexes/External/
ExamineSettings.config
文件如下:
<Examine>
<ExamineIndexProviders>
<providers>
<add name="InternalIndexer" type="UmbracoExamine.UmbracoContentIndexer, UmbracoExamine"
supportUnpublished="true"
supportProtected="true"
analyzer="Lucene.Net.Analysis.WhitespaceAnalyzer, Lucene.Net"/>
<add name="InternalMemberIndexer" type="UmbracoExamine.UmbracoMemberIndexer, UmbracoExamine"
supportUnpublished="true"
supportProtected="true"
analyzer="Lucene.Net.Analysis.Standard.StandardAnalyzer, Lucene.Net"/>
<!-- default external indexer, which excludes protected and unpublished pages-->
<add name="ExternalIndexer" type="UmbracoExamine.UmbracoContentIndexer, UmbracoExamine"/>
</providers>
</ExamineIndexProviders>
<ExamineSearchProviders defaultProvider="ExternalSearcher">
<providers>
<add name="InternalSearcher" type="UmbracoExamine.UmbracoExamineSearcher, UmbracoExamine"
analyzer="Lucene.Net.Analysis.WhitespaceAnalyzer, Lucene.Net"/>
<add name="ExternalSearcher" type="UmbracoExamine.UmbracoExamineSearcher, UmbracoExamine" />
<add name="InternalMemberSearcher" type="UmbracoExamine.UmbracoExamineSearcher, UmbracoExamine"
analyzer="Lucene.Net.Analysis.Standard.StandardAnalyzer, Lucene.Net" enableLeadingWildcard="true"/>
</providers>
</ExamineSearchProviders>
</Examine>
由于此问题的不可预测性,如果没有编写WebJob以定期重新发布文章,我不确定接下来要尝试什么。
答案 0 :(得分:1)
首先要做的是更新您的检查配置
附加到网络应用程序的文件系统实际上是一个UNC共享,可能会遇到IO延迟问题,这反过来会导致Umbraco稍微翻转一下。
尝试按照the following更新ExamineSettings.config
并将其添加到索引器中:
directoryFactory="Examine.LuceneEngine.Directories.SyncTempEnvDirectoryFactory,Examine"
SyncTempEnvDirectoryFactory使Examine能够同步索引 远程文件系统和本地环境之间的临时 存储目录,将从临时访问索引 存储目录。由于其性质,此设置是必需的 Azure Web Apps上的Lucene文件和IO延迟。
这应该将性能问题排除在外。
然后,调试
索引问题应该在Umbraco的日志中找到(一些在Info级别,一些在Debug)。如果您尚未捕获Umbraco的日志,请使用类似Papertrail或Application Insights的内容来收集日志,看看您是否可以识别导致删除的内容(您可能需要将日志记录级别删除到Debug以捕获它。)
N.B如果您确实将日志推送到外部服务,然后将其包装在Umbraco Core的Async / Parallel提供程序中:这是一个示例配置。
<log4net>
<root>
<priority value="Info"/>
<appender-ref ref="AsynchronousLog4NetAppender" />
</root>
<appender name="AsynchronousLog4NetAppender" type="Umbraco.Core.Logging.ParallelForwardingAppender,Umbraco.Core">
<appender-ref ref="PapertrailRemoteSyslogAppender"/>
</appender>
<appender name="PapertrailRemoteSyslogAppender" type="log4net.Appender.RemoteSyslogAppender">
<facility value="Local6" />
<identity value="%date{yyyy-MM-ddTHH:mm:ss.ffffffzzz} your-site-name %P{log4net:HostName}" />
<layout type="log4net.Layout.PatternLayout" value="%level - %message%newline" />
<remoteAddress value="logsN.papertrailapp.com" />
<remotePort value="XXXXX" />
</appender>
<!--Here you can change the way logging works for certain namespaces -->
<logger name="NHibernate">
<level value="WARN" />
</logger>
</log4net>