Источник: Relib
Знаете ли вы, что для того чтобы создать поисковую систему на сайте вы можете использовать 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>
При просмотре готовой страницы в браузере вы увидите текстовое поле для ввода запроса и кнопку "Фас!". Скрытые поля означают следущее:
- mh - максимальное число документов (hits), которое может вернуть поисковая система. Например, вы можете установить это значение в 200. Задание слишком большого значения может излишне загрузить ваш веб-сервер, однако слишком маленькое - также может вернуть недостаточное количество результатов, поэтому здесь вам потребуется определить наиболее оптимальное число для вашего сайта.
- sd - имя поля, по которому требуется производить сортировку. В нашем примере мы используем поле hitcount, которое содержит количество повторений слова в документе, т.е. отсортируем результаты поиска по релевантности в порядке убывания - descending (отсюда и "d" в названии поля).
- ct указывает, где найти каталог или индексную БД, которая будет использоваться. Когда для создания индекса включается Index Server, администратор указывает, где будет находится индексная БД. Вы должны задать в этом поле правильный путь иначе поисковый запрос возвратит пустой результат.
Для отображения результата будем вызывать другую страницу, которая будет получать запрос из поисковой формы и передавать его серверу, причем, обратите внимание, что используется тип 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. Попробуйте его, это действительно просто! Создав собственную поисковую систему вы придатите вашему сайту более профессиональный вид и предотвратите преждевременный уход пользователей с сайта, так как у них теперь появится возможность быстро найти все ваши документы.