我的Wiki开始返回不完整的搜索结果。
用户会搜索他们知道是文章一部分的术语,但是文章没有在结果中返回。
他们可以浏览文章,并查看页面确实包含搜索术语。
这种情况经常发生,所以我一直在努力寻找解决方案。我没有找到任何人遇到过这个问题。搜索索引目前认为Wiki中有300页,但实际上有1193页。
我按照Screwturn网站上重建索引的说明进行操作,包括在web.config中调整超时时间。我尝试了几次重建,每次之间出现大约70个错误。我看到了超时错误和主键冲突。重建无法运行很长时间,通常少于10分钟。
是否有人成功地重建了索引?
是否有人看到了相同类型的错误并能够解决它们?
当重建完成后,我会看到什么?我想到我会看到一个新的搜索索引,引用1193个页面,而不是300个。这正确吗?
任何帮助都将不胜感激。
下面是我看到的三个错误消息的示例。
(更新于7/30) 我尝试删除IndexDocument记录并再次进行重建,但结果仍然相同。索引的大小没有增加。我查看了IndexDocument表中的记录,并发现其中一个命名空间的M文章中断了。这就解释了为什么搜索对于M后面的单词会失败。此外,只有两个命名空间正在进行索引。在重建索引时,我观察了管理主页并等待轮子停止旋转,但似乎什么都没有改变。我检查了系统日志,但没有看到任何错误。只要我从管理主页重新启动应用程序,超时错误就再次出现在日志中。这让我比之前更加疑惑。
用户会搜索他们知道是文章一部分的术语,但是文章没有在结果中返回。
他们可以浏览文章,并查看页面确实包含搜索术语。
这种情况经常发生,所以我一直在努力寻找解决方案。我没有找到任何人遇到过这个问题。搜索索引目前认为Wiki中有300页,但实际上有1193页。
我按照Screwturn网站上重建索引的说明进行操作,包括在web.config中调整超时时间。我尝试了几次重建,每次之间出现大约70个错误。我看到了超时错误和主键冲突。重建无法运行很长时间,通常少于10分钟。
是否有人成功地重建了索引?
是否有人看到了相同类型的错误并能够解决它们?
当重建完成后,我会看到什么?我想到我会看到一个新的搜索索引,引用1193个页面,而不是300个。这正确吗?
任何帮助都将不胜感激。
下面是我看到的三个错误消息的示例。
System.Data.SqlClient.SqlException: Violation of UNIQUE KEY constraint 'UQ_IndexDocument'. Cannot insert duplicate key in object 'dbo.IndexDocument'. The statement has been terminated. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at ScrewTurn.Wiki.Plugins.SqlCommon.SqlClassBase.ExecuteNonQuery(DbCommand command, Boolean close, Boolean logError)
System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. The statement has been terminated. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at ScrewTurn.Wiki.Plugins.SqlCommon.SqlClassBase.ExecuteNonQuery(DbCommand command, Boolean close, Boolean logError)
System.Data.SqlClient.SqlException: Violation of PRIMARY KEY constraint 'PK_IndexDocument'. Cannot insert duplicate key in object 'dbo.IndexDocument'. The statement has been terminated. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at ScrewTurn.Wiki.Plugins.SqlCommon.SqlClassBase.ExecuteNonQuery(DbCommand command, Boolean close, Boolean logError)
(更新于7/30) 我尝试删除IndexDocument记录并再次进行重建,但结果仍然相同。索引的大小没有增加。我查看了IndexDocument表中的记录,并发现其中一个命名空间的M文章中断了。这就解释了为什么搜索对于M后面的单词会失败。此外,只有两个命名空间正在进行索引。在重建索引时,我观察了管理主页并等待轮子停止旋转,但似乎什么都没有改变。我检查了系统日志,但没有看到任何错误。只要我从管理主页重新启动应用程序,超时错误就再次出现在日志中。这让我比之前更加疑惑。
- 什么是指示索引已成功重建或索引已停止重建的标志?我认为这是在单击“重建”链接后运行的旋转轮。
- 我已经研究过“超时”错误,并且所有信息都指向一个超时值太短,论坛帖子上说要更新.NET代码中的超时值,或者调整服务器上的查询等待属性。是否有人成功做到了这一点,你做了什么?
- 有人知道维基正在运行哪个脚本来重建索引吗?是否可以从SQL服务器手动运行它?