Umbraco 检查索引在 Azure 上消失

Umbraco Examine indexes disappearing on Azure

我在 Azure 上的应用服务中托管的 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 来定期重新发布文章,我不确定下一步该怎么做。

首先要做的是更新您的检查配置

附加到 Web 应用程序的文件系统实际上是一个 UNC 共享,它可能会遇到 IO 延迟问题,这反过来会导致 Umbraco 稍微崩溃。

尝试根据 the following 更新您的 ExamineSettings.config 并将其添加到索引器中:

directoryFactory="Examine.LuceneEngine.Directories.SyncTempEnvDirectoryFactory,Examine"

The SyncTempEnvDirectoryFactory enables Examine to sync indexes between the remote file system and the local environment temporary storage directory, the indexes will be accessed from the temporary storage directory. This setting is required due to the nature of Lucene files and IO latency on Azure Web Apps.

这应该可以解决性能问题。

然后,调试

索引问题应该在 Umbraco 的日志中找到(一些在信息级别,一些在调试)。如果您还没有捕获 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>