Я знаю, что прошло несколько месяцев с тех пор, как на них дан ответ, но в настоящее время я использую WIS на Windows Server 2008 R2 с использованием C # и натолкнулся на это при поиске.Иногда я не могу принять ответ «нет», поэтому я искал в интернете и нашел это решение.
Я уверен, что вы можете преобразовать код по мере необходимости, но ...
Вам потребуется установить службу индексации файловых служб Windows Server 2003 из ролей диспетчера сервера.
Для свойств каталога я отключил параметры наследования и соответствующим образом установил WWW-сервер.Я также сгенерировал 250 символьных аннотаций для хранения в столбце «Характеристика».
Когда я настраивал свой каталог, я включал / исключал определенные папки из каталога моего веб-сайта (включая корень сайта) и, когда я запрашивал его,Я использовал приведенный ниже оператор SQL:
EDIT: Обратите внимание на использование FREETEXT(Filename, '\""+q+"\"'))
для запроса имени файла
String fileTypes = "\".aspx\" OR \".doc*\" OR \".xls*\" OR \".ppt*\" OR \".txt\" OR \".pdf\" OR \".rtf\"";
String q = query.Text.Replace("'", "''");
sSqlString = "SELECT Filename, DocTitle, Size, VPath, Path, Rank, Write, Contents, Characterization ";
sSqlString += "FROM SCOPE() ";
sSqlString += "WHERE (CONTAINS(Contents, '\""+q+"\"') ";
sSqlString += "OR FREETEXT(Filename, '\""+q+"\"')) ";
sSqlString += "AND CONTAINS(Filename, '"+fileTypes+"') ";
sSqlString += "ORDER BY rank DESC, write DESC";
Я создаю свое соединение, используяс помощью оператора:
using(OleDbConnection conn = new OleDbConnection("Provider=MSIDXS.1;Data Source='"+catalog+"'"))
{
//your connection and data collection code here
}
Одна из проблем, с которыми я столкнулся, связана с определенными типами файлов.Если создатель документа не включил заголовок документа в свой продукт MS Office, вы не получите DocTitle.Если в файле PDF нет распознаваемого текста, а свойства документа не заполнены, то docTitle и Content будут пустыми.На мой взгляд, если бизнес не делает свои файлы 508 совместимыми, они не будут отображаться в результатах должным образом.
Вот краткий фрагмент шаблона ListView, который я использую.
<ItemTemplate>
<h3><a href="<%# vFilePath(Eval("Path")) %>"><%# Eval("DocTitle").ToString().Trim() == "" ? Eval("Filename").ToString().Split('.')[0] : ProperCase(Eval("DocTitle").ToString()) %></a></h3>
<p><span style="color:#0083be;">
<%# Request.ServerVariables["HTTP_HOST"].Length+vFilePath(Eval("Path")).Length > 100 ? (Request.ServerVariables["HTTP_HOST"]+vFilePath(Eval("Path"))).Substring(0,100)+"..." : Request.ServerVariables["HTTP_HOST"]+vFilePath(Eval("Path")) %></span><br />
<span style="color:#4d4e53"><%# String.Format("{0:MMMM dd, yyyy}",Eval("Write")) %> - </span>
<%# Eval("Characterization").ToString().Trim() == "" ? "..." : Eval("Characterization").ToString().Length == 250 ?
Eval("Characterization").ToString().Substring(0,250)+"..." : Eval("Characterization")%>
</p>
</ItemTemplate>
Так как docTitle в моем случае используется для заголовка результатов, я решил, что если оно пустое, я могу взять эту пустую строку и заменить ее именем файла, за вычетом расширения.
При выполнении запроса убедитесь, что вы также правильно используете свои метатеги, используя ключевые слова и описание.Это и статический контент на страницах .aspx действительно читаются WIS.Вы заметите, как я использовал Characterization для извлечения содержимого.
Эта ссылка содержит инструкции по настройке WIS W2k8 вместе с кодом vb.net.
This ссылка является хорошим источником для множества свойств, которые могут быть запрошены и / или отображены.