СТАТЬЯ
23.01.01

Использование объектов Microsoft Index Server

Эта статья впервые была опубликована на сайте www.relib.com

Знаете ли вы, что для того чтобы создать поисковую систему на сайте вы можете использовать Microsoft Index Server, который входит в Microsoft IIS? Благодаря этому программному пакету вы сможете быстро и легко создать собственный поиск по сайту.

Не верите? Тогда, посмотрим вместе. Создадим на странице форму поиска, где ваш посетитель сможет вводить запрос и которая будет обращаться к БД Index Server.

Создание формы для поиска

Форма для поиска представляет собой обычную HTML-форму с несколькими скрытыми ("hidden") полями, которые отвечают за специфику запроса к поисковой системе.

<form method="get" action="/sitesearch/sitesearch.asp" 
        id=form1 name=form1>
   <!-- search text -->
   <table width="100%">
      <tr width="100%" bgcolor="Black">
         <td width="100%">
            <font color="White">
            <b>Search</b>
            </font>
         </td>
      </tr>
   </table>
   <input type="text" name="qu" size="20"><br>

   <!-- max hits -->
   <input type="hidden" name="mh" value=50>
   <!-- sort by hits -->
   <input type="hidden" name="sd" value="Hitcount">
   <!-- allow enumeration -->
   <input type="hidden" name="ae" value="1">
   <!-- catalog -->
   <input type="hidden" name="ct" value="c:\inetpub\www07120\index\">
   <input type="submit" value="Фас!" name="Search">  
   <a href="/sitesearch/searchhelp.asp"><font size=-1>Help</a></font>
</form>
При просмотре готовой страницы в браузере вы увидите текстовое поле для ввода запроса и кнопку "Фас!". Скрытые поля означают следущее:

Для отображения результата будем вызывать другую страницу, которая будет получать запрос из поисковой формы и передавать его серверу, причем, обратите внимание, что используется тип GET.

Создание cтраницы для отображения результатов поиска

Теперь очередь за cтраницей результатов, которая будет получать значения из формы, чтобы передать их Index Server.

Общий схема ее работы будет следующей:

  • Открывается набор записей recordset
  • Используя стандартные методы ADO cоздается цикл через весь полученный recordset
    <%
    'Создаем объект Query и инициализируем его
    'используя SetQueryFromURL
    
    Set objQuery = Server.CreateObject("ixsso.Query")
    
    'Получить свойства query из входящей 
    'URL (используя тип формы GET)
    objQuery.SetQueryFromURL(Request.QueryString)
    
    'Зададим требуемые поля
    objquery.columns="filename,HitCount,vpath,DocTitle,characterization"
    
    'Откроем recordset
    set rsQuery = objquery.createrecordset("nonsequential")
    
    'И пока свойство rsquery.eof не равно TRUE выводим 
    'результаты. Значение TRUE будет означать конец recordset
    
    %>
    
    <html>
    <head>
    </head>
    
    <h1>Результаты поиска</h1>
    <br><br>
    <%
    if not rsquery.eof then
       Response.Write "Найдено " _ 
                    & rsquery.recordcount & " документов."
       if rsquery.recordcount > 30 then
          Response.Write "Попробуйте более" _
             & "точно сформулировать запрос."
       end if
       Response.Write "<br>"
    end if   
    %>
    
    <%
    if not rsquery.eof then
    while not rsquery.eof and rowcount > 0
        if rsquery("doctitle") <> "" then
            Response.Write "<p><b><a href='" _ 
                    & rsquery("vpath") & "'>" _ 
                    & rsquery("doctitle") & "</a></b><br>"
            response.write "<font size=-1>" _ 
            & rsquery("characterization") _
            & "...</font><Br>"
            Response.Write "<font size=-2>" _
            & rsquery("hitcount") & "</font></p>"
        end if
        rowcount = rowcount - 1
            rsquery.movenext
    wend
    Response.Write "<br><Br>"
    %>
    
    <%      
    else
    %>
     
    <p>
    Документы не найдены. Попробуйте сформулировать
    ваш запрос по-другому.
    </p>
      
    <%
    end if
    %>
    
    </body>
    </html>
    

    Первая вещь, которую требуется сделать - это установить ссылку на объект Index Server, путем использования метода server.creatobject:

    Set objQuery = Server.CreateObject("ixsso.Query")

    Теперь объект objQuery установлен и готов для настройки. Зададим запрос, который требуется выполнить в БД. Он может быть получен из входящей информации URL используя:

    objQuery.SetQueryFromURL(Request.QueryString)

    Затем, укажем названия полей, которые требуется возвращать на странице результатов поиска.

    objquery.columns="filename,HitCount,vpath,DocTitle,characterization"

    В нашем примере это: имя файла документа filename; число повторений слова HitCount, которое встречается в документе; заголовок документа (в HTML-тэге Title) DocTitle; информация о файле characterization. Этот набор данных позволит дать пользователю краткую, но, в то же время, довольно емкую информацию о найденных документах.

    Если вы используете мета-тэг Description для задания описания документа, то его содержание будет включено в characterization. Если нет, тогда characterization будет возвращать начало документа. Так как Index Server игнорирует код ASP-скрипта, то в последнем случае вы получите "реальное" содержание.

    И, наконец, можно сделать запрос к БД - просто создаем recordset, также как в любом другом случае работы с ADO.

    set rsQuery = objquery.createrecordset ("nonsequential")

    С возвращаемым набором записей rsQuery можно использовать MoveNext, MovePrev и др. методы ADO. Чтобы получить значение поля используйте созданный объект rsQuery:

    rsquery("doctitle")

    Чтобы получить количество записей, возвращенных запросом, используйте свойство Rsquery.RecordCount.

    Таким образом, мы сделали элементарный пример работы ASP-приложения с Index Server. Попробуйте его, это действительно просто! Создав собственную поисковую систему вы придатите вашему сайту более профессиональный вид и предотвратите преждевременный уход пользователей с сайта, так как у них теперь появится возможность быстро найти все ваши документы.

    Дополнительную информацию Вы можете получить в компании Interface Ltd.

    Обсудить на форуме Microsoft
    Отправить ссылку на страницу по e-mail


    Interface Ltd.


    По техническим вопросам обращайтесь к вебмастеру
    Документ опубликован: 23.01.01