1

我在 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 来定期重新发布文章,我不确定接下来要尝试什么。

4

1 回答 1

1

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

附加到 Web 应用程序的文件系统实际上是一个 UNC 共享,它可能会受到 IO 延迟问题的影响,这反过来又会导致 Umbraco 出现一点问题。

尝试ExamineSettings.config按照以下方式更新您的并将其添加到索引器中:

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

SyncTempEnvDirectoryFactory 使 Examine 能够在远程文件系统和本地环境临时存储目录之间同步索引,索引将从临时存储目录访问。由于 Lucene 文件的性质和 Azure Web 应用程序上的 IO 延迟,需要此设置。

这应该将性能问题排除在外。

然后,调试

索引问题应该在 Umbraco 的日志中找到(一些在 Info 级别,一些在 Debug 级别)。如果您尚未捕获 Umbraco 的日志,则使用Papertrail或 Application Insights 之类的工具来收集日志并查看是否可以确定导致删除的原因(您可能需要将日志记录级别降至 Debug 才能捕获它)。

注意,如果您确实将日志推送到外部服务,则将其包装在 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>
于 2017-10-31T15:51:45.743 回答