2013-05-08 3 views
3

위키에서 불완전한 검색 결과를 반환하기 시작했습니다.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 홈 페이지에서 응용 프로그램을 다시 시작하자 마자 로그에 시간 초과 오류가 다시 나타납니다. 이것은 답변보다 더 많은 질문을합니다.

  1. 인덱스가 성공적으로 다시 작성되었거나 인덱스가 다시 작성되지 않는다는 표시기는 무엇입니까? 나는이 링크가 재건 된 후에 달리는 회전 바퀴라고 생각했다.

  2. 시간 초과 오류를 조사한 결과 시간 제한 값이 너무 짧아서 포럼 게시물에 .NET 코드의 시간 초과 값을 업데이트하거나 서버의 쿼리 대기 속성을 조정한다고되어 있습니다. 아무도 이것으로 성공하지 못했고 당신은 무엇을 했습니까?

  3. 누가 위키에서 색인을 다시 작성하기 위해 어떤 스크립트를 실행하는지 알고 있습니까? SQL 서버에서 수동으로 실행할 수 있습니까?

업데이트 : 내 답변을 찾는 것을 포기해야했습니다. IndexDocument 테이블에 나열되지 않은 입자를 업데이트하여 인덱스를 한 번에 하나씩 다시 작성하도록 강제 할 수 있음을 알게되었습니다.이것이 작동하는 동안, 네임 스페이스에서 AllPages 페이지를 볼 때 예기치 않은 동작이 발생합니다. AllPages 페이지는 일반적으로 모든 기사 (및 각 섹션의 문자)를 사전 순으로 나열합니다. 이 강제 업데이트를 수행하면 AllPages 페이지가 사전 순으로 페이지를 표시하지만 섹션 순서는 "#, A, B"와 유사합니다. 페이지의 다음 배치는 "B, C, K"등이 될 것입니다. 거의 이상적이지만 검색은 다시 작동합니다. problie을 가진 다른 사람을위한 단지 FYI, 해결 방법이 있습니다. 위키가 은퇴하고 좀 더 견고하고 (지원되는!) 지식 기반으로 옮겨 갈 때 이것이 최종 해결책이 될 것입니다. Dreamwalker와 Doug에게 감사드립니다.

+0

먼저 할 일은 백업을 만드는 것입니다! ;) 그런 다음 indexdocument 테이블의 모든 항목을 삭제 한 다음 인덱스를 다시 다시 작성하십시오. 버그가있는 것 같아서 – Dreamwalker

+0

처럼 이슈를 http://stw.codeplex.com에 기록하면이 문제로 돌아갈 시간이 있습니다. 버전 3.0.4.560 있습니다. 나는 지금 제공 할 수있는 작은 서비스를 중단하는 것에 대해 걱정하지 않고 테스트 할 프로덕션 위키의 클론을 가지고 있습니다. Dreamwalker의 아이디어를 시도하고 색인을 다시 작성하여 결과를 알려 드리겠습니다. –

답변

0

나는이 똑같은 문제를 해결하기 위해 노력하고 있었고 다른 누군가가 해결책을 찾는지 여기에서 확인했다. 여기 내 조사 결과가 있습니다.

색인 다시 작성을 수행 한 다음 응용 프로그램을 다시 시작했지만 123 개의 전체 페이지 중 20 개에서 색인이 생성됩니다. 나는 그것이 잘 붙어있는 것처럼 보이기 위해 잘 점검 한 마지막 20 번인 것을 기억한다. 시스템 로그에 오류가 표시되지 않습니다. 이 설치 버전은 3.0.5.600 (최신 버전)입니다.

몇개의 ScrewTurn 설치가 있으므로, 정확하게 검색하고 190 페이지가 모두 색인 된 것으로 보이는 다른 설치를 확인했습니다! 이 설치 버전은 3.0.2.500입니다.

색인 생성 페이지가 최신 버전에서 손상되었는지 궁금합니다. 실행중인 버전을 공유 할 수 있습니까? 어쩌면이 두 버전 사이의 변경 사항을 확인하면 문제가 부각 될 것입니다.

+2

http://stw.codeplex.com – Dreamwalker

1

페이지 내용이없는 페이지를 확인하고 내 색인을 수정 한 페이지를 삭제하십시오.

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를 검색 할 수 없습니다"라는 메시지가 생성되고 인덱스가 중지되었습니다.

+0

에서 문제를 로깅 할 가치가 있습니다. 로그를 보려면 위키의 홈 페이지로 이동하여 관리 링크를 클릭 한 다음 페이지 상단의 시스템 로그 탭을 클릭하십시오. – bshacklett