<% var CommonResultScriptName = "search/common_result.asp"; var SimpleSearchFormName = "sim_form.asp"; // Файл содержит общие для простого и расширенного поиска функции function DoShowSearchResults() { var DocumentArray = Session( "Documents" ); var firstDocumentIndex; if( Request.QueryString( "firstDocument" ).Count == 0 ) firstDocumentIndex = 1; else firstDocumentIndex = Number( Request.QueryString( "firstDocument" ) ); var res = ShowResults( firstDocumentIndex, DocumentArray, CommonResultScriptName ); return res; } function ProcessRepeatSearchForm() { requestString = SmartUpload.Form( "requestStr" ); searchType = Session( "SearchType" ); maxDistance = Session( "MaxDistance" ); order = Session( "Order" ); CommonSearch( requestString, searchType, order, maxDistance ); Server.Execute( CommonResultScriptName ); } function ProcessSimpleSearchForm() { requestString = SmartUpload.Form( "requestStr" ); CommonSearch( requestString, 4, 0, 0 ); Server.Execute( CommonResultScriptName ); } function ProcessAdvancedSearchForm() { var requestString = SmartUpload.Form( "requestStr" ); var searchType; if( SmartUpload.Form( "find_type" ) == "OR" ) searchType = 1; else if( SmartUpload.Form( "find_type" ) == "AND" ) searchType = 2; else if( SmartUpload.Form( "find_type" ) == "LOGICAL" ) searchType = 3; else searchType = 0; var maxDistance = SmartUpload.Form( "maxDistance" ); var order; if( SmartUpload.Form( "order" ) == "ON" ) order = 1; else order = 0; CommonSearch( requestString, searchType, order, maxDistance ); Server.Execute( CommonResultScriptName ); } function AdvSearchDescription( _searchType, _exactWordsOrder, _maxDistance ) { var result; switch( _searchType ) { case 0: result = ExactPhraseDescr; break; case 1: result = AnyWordDescr; break; case 2: result = AllWordsDescr; break; case 3: result = LogacalExpressionDescr; break; default: result = ""; //result = String(_searchType); break; } return result; } function CommonSearch( requestStr, searchType, order, maxDistance ) { if( !Response.IsClientConnected() ) { Server.Execute( SimpleSearchFormName ); return; } Session( "RequestString" ) = "" + requestStr; Session( "SearchType" ) = Number( searchType ); Session( "MaxDistance" ) = Number( maxDistance ); Session( "Order" ) = Number( order ); var documentArray = null; Session( "Documents" ) = documentArray; if( searchType == 4 ) { Session( "RequestDescription" ) = String( SimDescription ); documentArray = SimpleSearch( requestStr ); } else { var paramsDescription = AdvSearchDescription( searchType, order, maxDistance ); //var paramsDescription = String(searchType) + " " + String(order) + " " + String(maxDistance); Session( "RequestDescription" ) = String( paramsDescription ); documentArray = AdvancedSearch( requestStr, searchType, order, maxDistance ); } Session( "Documents" ) = documentArray; } function SimpleSearch( requestStr ) { var result = new Array(); if( requestStr == "" ) return result; var FTREngine = Server.CreateObject( "WebSearch.FTREngineDual" ); var index = FTREngine.OpenIndex( IndexName ); var searchResult = index.Search( requestStr, 0, 0, 0, 0, 0, 0 ); var nDocuments = searchResult.GetDocumentCount(); if( nDocuments == 0 ) { searchResult = index.Search( requestStr, 0, 0, 3, 0, 0, 0 ); nDocuments = searchResult.GetDocumentCount(); } var i; for( i = 0; i < nDocuments; i++ ) result[i] = searchResult.GetDocument( i ); return result; } function AdvancedSearch( requestStr, _searchType, _exactWordsOrder, _maxDistance ) { var result = new Array(); if( requestStr == "" ) return result; var FTREngine = Server.CreateObject( "WebSearch.FTREngineDual" ); var index = FTREngine.OpenIndex( IndexName ); var maxDistance = 0; var exactWordsOrder = 0; var searchFlag; switch( _searchType ) { case 1: searchFlag = 1; break; case 2: searchFlag = 0; maxDistance = _maxDistance; exactWordsOrder = _exactWordsOrder; break; case 3: searchFlag = 4; break; default: // case_0: searchFlag = 0; maxDistance = 1; exactWordsOrder = 1; break; } var searchResult = index.Search( requestStr, 0, 0, searchFlag, maxDistance, exactWordsOrder, 0 ); var nDocuments = searchResult.GetDocumentCount(); var i; for( i = 0; i < nDocuments; i++ ) result[i] = searchResult.GetDocument( i ); return result; } function ShowResults( firstDocumentIndex, DocumentArray, fileName ) { if( !Response.IsClientConnected() ) { return false; } var nDocuments = DocumentArray.length; if( nDocuments == 0 ) { Response.Write( "

" + NotFound + "

\r\n" ); return false; } var lastDocumentIndex = firstDocumentIndex + MaxDocumentCountInPage - 1; if( lastDocumentIndex > nDocuments ) lastDocumentIndex = nDocuments; var leftText = Documents + firstDocumentIndex + "..." + lastDocumentIndex; var rightText = TotalPrompt + nDocuments; // output results WriteResultsBar( leftText, rightText, firstDocumentIndex, fileName, nDocuments ); Response.Write( "

\r\n" ); var i; for( i = firstDocumentIndex; i <= lastDocumentIndex; i++ ) WriteDocument( i, DocumentArray ); WriteResultsBar( leftText, rightText, firstDocumentIndex, fileName, nDocuments ); return true; } function WriteDocument( documentIndex, DocumentArray ) { Response.Write( "

\r\n" ); Response.Write( documentIndex + ". " ); var document = DocumentArray[documentIndex - 1]; var targetString = " "; if( OpenResultInSeparateWindow ) { targetString = " TARGET=\"_blank\" "; } var docURLAddress = document.Name; var documentTitle = GetDocTitle( document.Description ); if( documentTitle != 0 ) { var referenceToDocName = "" + documentTitle + "
\r\n"; Response.Write( referenceToDocName ); } else { Response.Write( "
" ); } var documentDescription = GetDocDescription( document.Description ); documentDescription += "\r\n"; Response.Write( documentDescription ); var referenceToFile = "" + docURLAddress + "
\r\n"; Response.Write( referenceToFile ); Response.Write( "

\r\n" ); document = null; } function GetFirstPart( text ) { textLength = text.length; var i; for( i = 0; i < textLength; i++ ) { symbol = text.charAt( i ); if( symbol == '\n' ) { subString = text.substring( 0, i ); return subString; } } return text; } function GetDocTitle( docDescriptionEx ) { return GetFirstPart( docDescriptionEx ); } function GetDocDescription( docDescriptionEx ) { // Формат: /n<signature>/n<description>/n<keywords>/n<body-text>/n // Наличие каждого из полей определяется в настройках индекса (WebIndex.ini) // Пропускаем имя документа и сигнатуру: part = GetFirstPart( docDescriptionEx ); text = docDescriptionEx.substr( part.length + 1 ); signature = GetFirstPart( text ); text = text.substr( signature.length + 1 ); description = GetFirstPart( text ); text = text.substr( description.length + 1 ); keywords = GetFirstPart( text ); text = text.substr( keywords.length + 1 ); bodyText = GetFirstPart( text ); var formattedDescription = ""; if( description.length > 0 ) formattedDescription += DocItemSymbol + description + "<br>"; if( keywords.length > 0 ) formattedDescription += DocItemSymbol + keywords + "<br>"; if( bodyText.length > 0 ) formattedDescription += DocItemSymbol + bodyText + "<br>"; return formattedDescription; } function WriteResultsBar( leftText, rightText, firstDocumentIndex, show_result, nDocuments ) { Response.Write( "<table CLASS=\"ResultBar\"><tr>" ); Response.Write( "<td align=\"left\"><p CLASS=\"SearchResult\"> " ); Response.Write( leftText ); Response.Write( "</p></td>" ); Response.Write( "<td align=\"center\">" ); WriteReferencesToOtherResults( firstDocumentIndex, show_result, nDocuments ); Response.Write( "</td>" ); Response.Write( "<td align=\"right\"><p CLASS=\"SearchResult\">" ); Response.Write( rightText ); Response.Write( " </p></td>" ); Response.Write( "</tr></table>" ); } function WriteReferencesToOtherResults( firstDocumentIndex, show_result, nDocuments ) { if( nDocuments < MaxDocumentCountInPage ) return; centerText = "<center>\r\n<P CLASS=\"SearchResultPage\">\r\n"; if( (referenceToPrevPagesGroup = ReferenceToPreviousPagesGroup( firstDocumentIndex, show_result, nDocuments )) != 0 ) { centerText += referenceToPrevPagesGroup; centerText += " \r\n"; } if( (referencesToOtherPages = ReferencesToOtherPagesInPagesGroup( firstDocumentIndex, show_result, nDocuments )) != 0 ) { var i; for( i = 0; i < referencesToOtherPages.length; i++ ) { centerText += referencesToOtherPages[i]; if( i < referencesToOtherPages.length - 1 ) centerText += " "; centerText += "\r\n"; } } if( (referenceToNextPagesGroup = ReferenceToNextPagesGroup( firstDocumentIndex, show_result, nDocuments )) != 0 ) { centerText += " "; centerText += referenceToNextPagesGroup + "\r\n"; } centerText += "</P>\r\n</center>\r\n"; Response.Write( centerText ); } function ReferenceToPreviousPagesGroup( firstDocumentIndex, show_result, nDocuments ) { var currentPagesGroup = CurrentPagesGroup( firstDocumentIndex ); if( currentPagesGroup > 1 ) { var maxDocumentCountInPagesGroup = MaxDocumentCountInPage * MaxPageCountInPagesGroup; var newFirstDocumentIndex = ( currentPagesGroup - 2 ) * maxDocumentCountInPagesGroup + 1; var queryString = "?firstDocument=" + newFirstDocumentIndex; var referenceToPreviousPagesGroup = "<a CLASS=\"SearchResultPageRef\" href=\"" + show_result + queryString + "\">" + "<<</a>"; return referenceToPreviousPagesGroup; } else { return 0; } } function ReferenceToNextPagesGroup( firstDocumentIndex, show_result, nDocuments ) { var PagesGroupCount = CurrentPagesGroup( nDocuments ); var currentPagesGroup = CurrentPagesGroup( firstDocumentIndex ); if( currentPagesGroup < PagesGroupCount ) { var maxDocumentCountInPagesGroup = MaxDocumentCountInPage * MaxPageCountInPagesGroup; var newFirstDocumentIndex = currentPagesGroup * maxDocumentCountInPagesGroup + 1; var queryString = "?firstDocument=" + newFirstDocumentIndex; var referenceToNextPagesGroup = "<a CLASS=\"SearchResultPageRef\" href=\"" + show_result + queryString + "\">" + ">></a>"; return referenceToNextPagesGroup; } else { return 0; } } function ReferencesToOtherPagesInPagesGroup( firstDocumentIndex, show_result, nDocuments ) { var PageCount = CurrentPage( nDocuments ); var referencesArray = new Array(); var currentPage = CurrentPage( firstDocumentIndex ); var currentPagesGroup = CurrentPagesGroup( firstDocumentIndex ); var i; for( i = 0; i < MaxPageCountInPagesGroup; i++ ) { var pageIndex = ( currentPagesGroup - 1 ) * MaxPageCountInPagesGroup + i + 1; if( pageIndex > PageCount ) break; var newFirstDocumentIndex = ( pageIndex - 1 ) * MaxDocumentCountInPage + 1; var referenceText; if( pageIndex == currentPage ) { referenceText = "<b>" + pageIndex + "</b>"; referencesArray[i] = referenceText; } else { referenceText = pageIndex; var queryString = "?firstDocument=" + newFirstDocumentIndex; var referenceToPage = "<a CLASS=\"SearchResultPageRef\" href=\"" + show_result + queryString + "\">" + referenceText + "</a>"; referencesArray[i] = referenceToPage; } } if( i == 0 ) return 0; else return referencesArray; } function CurrentPage( firstDocumentIndex ) { var currentPage = ( firstDocumentIndex - ( firstDocumentIndex % MaxDocumentCountInPage ) ) / MaxDocumentCountInPage + 1; if( firstDocumentIndex % MaxDocumentCountInPage == 0 ) currentPage -= 1; return currentPage; } function CurrentPagesGroup( firstDocumentIndex ) { var maxDocumentCountInPagesGroup = MaxDocumentCountInPage * MaxPageCountInPagesGroup; var currentPagesGroup = ( firstDocumentIndex - ( firstDocumentIndex % maxDocumentCountInPagesGroup ) ) / maxDocumentCountInPagesGroup + 1; if( firstDocumentIndex % maxDocumentCountInPagesGroup == 0 ) currentPagesGroup -= 1; return currentPagesGroup; } %>