2015-07-17 4 views
4

Я только что перенесла сайт с сервера 2003 на сервер 2012 года, а служба индексирования MS недоступна.
В ходе некоторых исследований я обнаружил, что MS Search Service является «заменой» и, как таковой, я установил ее на сервере 2012. Помимо этого, я не нашел, какой код ASP-Classic (VB) понадобится чтобы новая служба поиска могла каталогизировать мои документы, как это сделала служба индексирования.Необходимость замены для службы индексирования MS на сервере 2012 с помощью классического ASP (VB)

Имеет ли служба поиска MS возможности и гибкость для поиска каталогов и поиска документов и возвращает результаты таким же образом, как и служба индексирования MS?

Ниже приведен пример кода, который в настоящее время называет MS Indexing Service (на сервере Windows 2003):

<% 
Dim strQuery ' The text of our query 
Dim objQuery ' The index server query object 
Dim rstResults ' A recordset of results returned from I.S. 
Dim objField ' Field object for loop 
Dim objUtility 

' Retreive the query from the querystring 
strQuery = Request.QueryString("CiRestriction") 
if strQuery <> "" then 
    if Request.QueryString("ExactPhrase") = "Yes" then 
    strQuery = """" & strQuery & """" 
    end if 
end if 

' If the query isn't blank them proceed 
If strQuery <> "" Then 
    ' Create our index server object 
    Set objQuery = Server.CreateObject("IXSSO.Query") 

    ' Set its properties 

     objQuery.Catalog = "Test_Docs" ' Catalog to query 
     objQuery.MaxRecords = 75   ' Max # of records to return 
     objQuery.SortBy  = "Rank[d], size" 
     objQuery.Columns = "Characterization, DocTitle, Directory, Filename, Path, Rank, Size, Vpath, Write" 

     ' Build our Query: Hide admin page and FPSE pages 
     'strQuery = "(" & strQuery & ")" _ 
     ' & " AND NOT #filename = *admin*" _ 
     ' & " AND NOT #path *\_vti_*" 

     ' Uncomment to only look for files modified last 5 days 
     'strQuery = strQuery & " AND @write > -5d" 

    ' To set more complex scopes we use the utility object. 
    ' You can call AddScopeToQuery as many times as you need to. 
    ' Shallow includes just files in that folder. Deep includes 
    ' subfolders as well. 
    ' 

    Set objUtility = Server.CreateObject("IXSSO.Util") 
    objUtility.AddScopeToQuery objQuery, "d:\test_shares\test_docs", "deep" 
    objQuery.Query = strQuery ' Query text 

    Set rstResults = objQuery.CreateRecordset("nonsequential") ' Get a recordset of our results back from Index Server 

    ' Check for no records 
    If rstResults.EOF Then 
     Response.Write "Sorry. No results found." 
    Else 
     ' Print out # of results 
     Response.Write "<p><strong>" 
     Response.Write rstResults.RecordCount 
     Response.Write "</strong> results found:</p>" 

     ' Loop through results  
     Do While Not rstResults.EOF 
      ' Loop through Fields 
      ' Pretty is as pretty does... good enough: 
      %> 
      <%KSize=formatnumber(rstResults.Fields("size")) 
      KSize= round(KSize/1024,0)%> 
      <p> 
      <%'test below using PoorMansIsNull function%> 
      <% If PoorMansIsNull(rstResults.Fields("DocTitle")) Or rstResults.Fields("DocTitle")="" Then %> 

       <a href="/ams/test_docs<%= PathToVpath(rstResults.Fields("path")) %>" target="_blank"><%= PathToVpath(rstResults.Fields("filename")) %></a> 
       <% Else %> 
       <a href="/ams/test_docs<%= PathToVpath(rstResults.Fields("path")) %>" target="_blank"><font size="3"><%= rstResults.Fields("DocTitle") %></font></a> 
       <% End If %> 

       <br><%= rstResults.Fields("Characterization") %><br> 

      <font color="#009900"><%= PathToVpath(rstResults.Fields("path")) %> - <%= KSize %>k<br /></font> 
      </p> 
      <% 

      ' Move to next result 
      rstResults.MoveNext 
     Loop 

     rstResults.MoveFirst 
     Response.Write "<pre>" 
     'Response.Write rstResults.GetString() 
     Response.Write "</pre>" 
    End If 

    ' Kill our recordset object 
    Set rstResults = Nothing 
    Set objUtility = Nothing 
    Set objQuery = Nothing 
End If 
%> 

</body> 
</html> 
<% 
Function PathToVpath(strPath) 
    Const strWebRoot = "d:\test_shares\test_docs\" 

    Dim strTemp 

    strTemp = strPath 

    strTemp = Replace(strTemp, strWebRoot, "\") 
    strTemp = Replace(strTemp, "\", "/") 

    PathToVpath = strTemp 
End Function 
%> 

И результаты будут перечислены, в документе (название документа, как указано ниже: enter image description here

Спасибо за любые выводы и/или альтернативы.

ответ

1

У меня такая же проблема. Я нашел руководство MS по этой проблеме: Querying the Index with Windows Search SQL Syntax.

Я проверил этот ASP (Classic) код и побежал нормально:

<html> 
<body> 
    Results<br> 
<ol> 
<% 
Set objConnection = CreateObject("ADODB.Connection") 
Set objRecordSet = CreateObject("ADODB.Recordset") 

objConnection.Open "Provider=Search.CollatorDSO;Extended Properties='Application=Windows';" 

'change directory on scope clause 
objRecordSet.Open "SELECT Top 20 " & _ 
    "System.ItemPathDisplay " & _ 
    ",System.ItemName " & _ 
    ",System.Size " & _ 
    "FROM SYSTEMINDEX" & _ 
    " WHERE SCOPE='file:E:\MANIF\DAAP\AC'", objConnection 


objRecordSet.MoveFirst 
Do Until (objRecordSet.EOF) 
    %> 
    <li> 
    <strong>Path Display:</strong><%=objRecordSet("System.ItemPathDisplay")%><br> 
    <strong>Name:</strong><%=objRecordSet("System.ItemName")%><br> 
    <strong>Size:</strong><%=objRecordSet("System.Size")%><br> 
    <hr> 
    </li> 
    <% 
    objRecordSet.MoveNext 
Loop 

objRecordSet.Close 
Set objRecordSet = Nothing 

objConnection.Close 
Set objConnection = Nothing 
%> 
</ol> 
</body> 
</html> 

Другие варианты:

  1. Попытка зарегистрировать жерех DLL в сервере окон. Поскольку я мог видеть, никто не имел успеха в этом вопросе. См. this post;
  2. Создайте виртуальную машину в предыдущей версии Windows для поддержки вашего asp. См. Это MS article.

Надеюсь, это могло вам помочь.

+0

Я нашел [эту тему] (https://forums.iis.net/t/1157941.aspx?Server+CreateObject+IXSSO+Query+fails+on+IIS7), связанный с этой проблемой. – gwarah

+0

Спасибо. Какую версию Windows Server вы используете для этого? – buck1112

+0

windows server 2012 стандарт – gwarah

1

Этот пример на самом деле неверен. Это не работает. Следующий код:

objRecordSet.Open "SELECT Top 20 " & _ 
"System.ItemPathDisplay " & _ 
",System.ItemName " & _ 
",System.Size " & _ 
"FROM SYSTEMINDEX", objConnection & _ 
"WHERE SCOPE='file:E:\MANIF\DAAP\AC'" 

Должен действительно использовать объект соединения в конце запроса. Провел несколько часов, задаваясь вопросом, почему предложение WHERE не работает.

objRecordSet.Open "SELECT Top 20 " & _ 
"System.ItemPathDisplay " & _ 
",System.ItemName " & _ 
",System.Size " & _ 
"FROM SYSTEMINDEX " & _ 
"WHERE SCOPE='file:E:\MANIF\DAAP\AC'", objConnection 

Это должно помочь всем, у кого есть такая же трудность.

+0

Конечно! Код был неправильным. Я только что исправил это. Благодарю. – gwarah