Служба индексирования пустое свойство имени файла - PullRequest
0 голосов
/ 21 декабря 2011

Я впервые пользуюсь службой индексирования Windows, и мне нужно вернуть имя и имя файла из запроса.

Мой запрос:

select doctitle, filename, vpath, rank, characterization from scope() where FREETEXT(Contents, '" & searchText & "') order by rank desc

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

Мой поиск возвращает результаты, но ничего в свойстве filename. Учение заселено, но больше ничего.

Спасибо, Mike

Ответы [ 2 ]

1 голос
/ 30 марта 2012

Я знаю, что прошло несколько месяцев с тех пор, как на них дан ответ, но в настоящее время я использую 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 ссылка является хорошим источником для множества свойств, которые могут быть запрошены и / или отображены.

0 голосов
/ 21 декабря 2011

Я нашел ответ в этой статье; http://support.microsoft.com/kb/954822

Вы не можете индексировать веб-сайты служб IIS в Windows Server 2008 из-за изменений дизайна, которые были внесены в IIS 7.0.

Преемником или службой индексирования является Windows Search. Windows Search Wiki

Похоже, мне придется изменить сайт для использования поиска Windows.

...