Search 重建wiki搜索索引

Search 重建wiki搜索索引,search,indexing,wiki,rebuild,screwturn,Search,Indexing,Wiki,Rebuild,Screwturn,我的维基开始返回不完整的搜索结果 用户将搜索他们知道是文章一部分的术语,而该文章不会在结果中返回 他们可以浏览到这篇文章,并查看页面是否包含搜索词 这种情况经常发生,所以我一直在努力寻找解决办法。我没能找到有这个问题的人。搜索索引目前认为wiki中有300个页面,但实际上有1193个 我按照Screwturn网站上的说明重建索引,包括在web.config中调整超时。最后,我尝试了几次重建,两次尝试之间出现了大约70个错误。我看到超时错误和主键冲突。重建不会持续很长时间,通常不到10分钟 有人成

我的维基开始返回不完整的搜索结果

用户将搜索他们知道是文章一部分的术语,而该文章不会在结果中返回

他们可以浏览到这篇文章,并查看页面是否包含搜索词

这种情况经常发生,所以我一直在努力寻找解决办法。我没能找到有这个问题的人。搜索索引目前认为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代码中的超时值,或者调整服务器上的查询等待属性。有人在这方面取得了成功吗?你做了什么

  • 有人知道wiki正在运行什么脚本来重建索引吗?是否可以从SQL server手动运行它


  • 更新:我不得不放弃寻找我的答案。我确实了解到,只需更新IndexDocument表中未列出的粒子,就可以强制索引一次重建一篇文章。虽然这确实有效,但当从您所在的名称空间查看AllPages页面时,会导致一些意外行为。AllPages页面通常按字母顺序列出所有文章(以及每个部分的字母)。一旦我做了这个强制更新,AllPages页面将按字母顺序显示页面,但各部分的顺序将类似于“#,A,B”。下一批页面将是“B、C、K”等等。虽然不太理想,但搜索再次奏效。仅供其他有问题的人参考,这里有一个解决方法。这将是我的最终解决方案,因为wiki将要退役并转移到一个更强大(和受支持的!)的知识库。谢谢Dreamwalker和Doug。

    我正试图解决这个问题,并在这里查看是否有其他人有解决方案。这是我调查的结果

    我执行了索引重建,然后重新启动了应用程序,但它仍然只说我的123个页面中有20个被索引。我记得上次检查的时候也是20岁,所以它好像卡住了。我在系统日志中没有看到任何错误。此安装的版本为3.0.5.600(最新版本)

    我有一些螺旋旋转安装,所以我只是检查了另一个安装,似乎搜索正确,并看到所有190页的索引!此安装的版本为3.0.2.500


    我想知道索引页面是否在最新版本中被破坏。你能分享你正在运行的版本吗?检查这两个版本之间的更改可能会突出问题。

    检查没有页面内容的页面并删除这些页面-这修复了我的索引

    G   SYSTEM  Page OnTime-Tools created
    G   wkrzystek   Page update requested for OnTime-Tools
    E   SQL Server Pages Storage Provider+SYSTEM    System.Data.SqlClient.SqlException: Transaction (Process ID 173) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
    E   SQL Server Pages Storage Provider+SYSTEM    Page indexing error for OnTime-Tools (skipping page): System.NullReferenceException: Object reference not set to an instance of an object.
    E   SYSTEM  http://websrv01/matrixwiki/Edit.aspx
    System.Web thrown System.Web.HttpUnhandledException
    E   SYSTEM  PageContent could not be retrieved for page OnTime-Tools - returning empty    
    

    我们也遇到了同样的问题——索引中670页中只有510页,内容在“O”之后停止。我找不到任何其他解决方案,所以我开始查看SQL日志表。我注意到添加了一个页面,但是试图存储页面内容时出现了SQL死锁。在这组错误之后,每次修改页面并且索引尝试更新时,都会生成一条“PageContent无法检索”消息,并且索引停止在那里

    我想首先要做的是备份然后删除indexdocument表中的所有项,然后再次重建索引。如果你仍然有一个问题日志,它看起来像一个错误,我终于有时间回到这个问题。我有3.0.4.560版。我有一个生产wiki的克隆可以测试,而不用担心它现在提供的服务会中断。我将尝试Dreamwalker的想法以及索引重建,并让您知道结果。若要查看日志,请转到Wiki的主页,单击“管理”链接,然后单击页面顶部的“系统日志”选项卡。