위키에서 불완전한 검색 결과를 반환하기 시작했습니다.Screwturn 위키 검색 색인 재구성
사용자가 기사의 일부인 것으로 알고있는 용어를 검색하고 해당 기사가 결과에 표시되지 않습니다.
그들은 기사를 검색하여 페이지에 검색어가 포함되어 있는지 확인할 수 있습니다.
이 문제가 자주 발생하여 해결 방법을 찾으려고했습니다. 이 문제가있는 사람을 찾을 수 없었습니다. 검색 색인은 현재 위키에 300 페이지가 있다고 생각하지만 실제로는 1193입니다.
나는 Screwturn 사이트에서 web.config의 시간 제한 조정을 포함하여 색인을 다시 작성하는 지침을 따랐습니다. 나는 몇 번의 재 시도와 시도들 사이의 약 70 번의 오류로 끝을 맺었다. 타임 아웃 오류와 기본 키 위반을 발견했습니다. 재건축은 10 분 이내로 아주 오래 지속될 것입니다.
누구나 색인을 다시 만들면 성공한 사람이 있습니까?
누구나 같은 종류의 오류를보고 해결할 수 있습니까?
누구든지 내가 재구성이 완료되었을 때 무엇을 기대할 수 있는지 알고 있습니까? 300 대신 1193 페이지를 참조하는 새로운 검색 인덱스가 표시 될 것이라고 생각했습니다. 맞습니까?
도움을 주시면 감사하겠습니다.
다음은 내가 본 오류 메시지의 세 가지 예입니다.
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 이후에 시작하는 단어에 대한 검색이 실패하는 이유를 설명합니다. 또한 두 개의 네임 스페이스 만 인덱싱됩니다. 인덱스가 재구성되는 동안 관리자 홈 페이지를보고 바퀴가 회전을 멈출 때까지 기다렸습니다. 아무것도 변하지 않는 것 같았다. 시스템 로그를 확인했지만 오류가 표시되지 않았습니다. admin 홈 페이지에서 응용 프로그램을 다시 시작하자 마자 로그에 시간 초과 오류가 다시 나타납니다. 이것은 답변보다 더 많은 질문을합니다.
인덱스가 성공적으로 다시 작성되었거나 인덱스가 다시 작성되지 않는다는 표시기는 무엇입니까? 나는이 링크가 재건 된 후에 달리는 회전 바퀴라고 생각했다.
시간 초과 오류를 조사한 결과 시간 제한 값이 너무 짧아서 포럼 게시물에 .NET 코드의 시간 초과 값을 업데이트하거나 서버의 쿼리 대기 속성을 조정한다고되어 있습니다. 아무도 이것으로 성공하지 못했고 당신은 무엇을 했습니까?
누가 위키에서 색인을 다시 작성하기 위해 어떤 스크립트를 실행하는지 알고 있습니까? SQL 서버에서 수동으로 실행할 수 있습니까?
업데이트 : 내 답변을 찾는 것을 포기해야했습니다. IndexDocument 테이블에 나열되지 않은 입자를 업데이트하여 인덱스를 한 번에 하나씩 다시 작성하도록 강제 할 수 있음을 알게되었습니다.이것이 작동하는 동안, 네임 스페이스에서 AllPages 페이지를 볼 때 예기치 않은 동작이 발생합니다. AllPages 페이지는 일반적으로 모든 기사 (및 각 섹션의 문자)를 사전 순으로 나열합니다. 이 강제 업데이트를 수행하면 AllPages 페이지가 사전 순으로 페이지를 표시하지만 섹션 순서는 "#, A, B"와 유사합니다. 페이지의 다음 배치는 "B, C, K"등이 될 것입니다. 거의 이상적이지만 검색은 다시 작동합니다. problie을 가진 다른 사람을위한 단지 FYI, 해결 방법이 있습니다. 위키가 은퇴하고 좀 더 견고하고 (지원되는!) 지식 기반으로 옮겨 갈 때 이것이 최종 해결책이 될 것입니다. Dreamwalker와 Doug에게 감사드립니다.
먼저 할 일은 백업을 만드는 것입니다! ;) 그런 다음 indexdocument 테이블의 모든 항목을 삭제 한 다음 인덱스를 다시 다시 작성하십시오. 버그가있는 것 같아서 – Dreamwalker
처럼 이슈를 http://stw.codeplex.com에 기록하면이 문제로 돌아갈 시간이 있습니다. 버전 3.0.4.560 있습니다. 나는 지금 제공 할 수있는 작은 서비스를 중단하는 것에 대해 걱정하지 않고 테스트 할 프로덕션 위키의 클론을 가지고 있습니다. Dreamwalker의 아이디어를 시도하고 색인을 다시 작성하여 결과를 알려 드리겠습니다. –