Makale Özeti

Web sitenizde, dosyaları yüklediğiniz ya da kullanıcıya yüklettiğiniz bir klasör var ve web sayfasından, bu klasörün içindeki dosyaların tipi(word, excel, pdf) ne olursa olsun, içeriğinde arama yapılmasını ve bulunan sonuç listesinden sayfalara ulaşılmasını istiyorsunuz. Bu makalede, Indexing Service kullanarak, dosya içeriğinde nasıl arama yapıldığı anlatılmaktadır.

Makale

Indexing Service Kullanarak, Dosyalarda Arama

Web sitenizde, dosyaları yüklediğiniz ya da kullanıcıya yüklettiğiniz bir klasör var ve web sayfasından, bu klasörün içindeki dosyaların tipi(word, excel, pdf) ne olursa olsun, içeriğinde arama yapılmasını ve bulunan sonuç listesinden sayfalara ulaşılmasını istiyorsunuz. Bu makalede, Indexing Service kullanarak, dosya içeriğinde nasıl arama yapıldığı anlatılmaktadır.



Indexing Service

Indexing service, dosya içerisinde içerik bulan ve hızlı ve etkin biçimde aramayı kolaylaştırmak için indekslenmiş katalog oluşturan bir servistir(Microsoft Windows 2000 ve sonrası için). Indexing Service, lokal ya da ağdaki bir bilgisayarda bulunan dosyaların içeriğindeki metine ve dosyaların özelliklerine ulaşabilir. Bu dosyalar web sitesinde yayınladığınız dosyalar da olabilir.

Indexing Service filtreleme yaparak içeriği bulur. Filtrelemede, dosyanın formatını anlayan filtreleme bileşenleri kullanılır. Format uluslararası dil ve yerel gibi çoklu dil özellikleri içerebilir. Filtreleme bileşeni, metni ve özelliği bulmak için dosyayı okuma metodlarını destekleyen Ifilter arabirimini sağlar. Windows 2000 ve Microsoft Windows XP, Microsoft Office dosyalarını, HTML dosyalarını, mail uzantılı mesajları ve düz metin dosyalarını filtrelemeyi destekler.

Indexing Server etkin arama için indekslenmiş katalogların içerisindeki bilgiyi birleştirir. Indexing, filtreleme, indeks kayıt yaratma ve birleştirme işlemlerinin tümünü katalogların içerisinde gerçekleştirir. Indexing işleminin son adımı kelimelerin ve konumlarının depolandığı ana indeks içeren bir katalog yaratmaktır.

Windows 2000 ve Windows XP, Indexing Service sorgulamak ve özelliklerini/durumunu yönetebilmek için temel olanaklar sağlar. Bu olanaklar;

  • Indexing Service çalışırken, arama için Indexing Service kataloğu kullanılabilir.
  • MMC de bulunan Indexing Service ek bileşeni ile, servis başlatılabilir, durdurulabilir, özellikler yönetilebilir.

Indexing Service Kurulumu

Index Service bilgisayarınıza kurmak için aşağıdaki yöntemi izleyebilirsiniz;

  • Start > Settings > Control Panel penceresini açınız
  • Add or Remove Programs > Add/Remove Windows Components tıkladığınızda Windows Components Wizard penceresi açılır
  • Bu pencereden Indexing Service bulup, işaretleyip, devam ederseniz, sihirbaz işlemi tamamlandığında, Indexing Service bilgisayarınıza kurulur.

 


Indexing Service Başlatma

Kurulum tamamlandığında, Computer Management (Start > Settings > Control Panel > Administrative Tools) penceresinden Indexing Service yönetebilirsiniz.

 

 

Indexing Service seçili iken sağ tıklayıp Start komutuna tıkladığınızda, size bir kereliğine bir soru yöneltilir, eğer bilgisayar açıldığında, servisin başlatılmasını istiyorsanız, Yes düğmesine tıklayın, bu işlemden sonra servis başlatılır.

Indexing Service Kataloğu Yaratma

Indexing Service kısa anlatımından sonra, örnekle birlikte Indexing Service incelemeye devam edeceğiz.

Örnekte, web sitesinde kullanıcıların eklediği dosyaların depolandığı, Dosyalar adında bir klasor var ve bu klasör içerisindeki dosyalarda, içerik aramasının yapılması isteniyor. Arama sadece Dosyalar klasörünün içerisinde olacağı için öncellikle bu klasör için katalog oluşturulması gerekmektedir.

  • Indexing Service üzerinde, sağ tuş kısayol menüsünden, New > Catalog seçilir.
  • Açılan Add Catalog penceresinden, kataloğa bir isim verilir ve klasörün konumu seçilir.

  • "Catalog will remain off-line until Indexing Service is restarted" mesajına Ok denildikten sonra, kataloğun aktif olabilmesi için, Indexing Service önce durdurup sonra tekrar başlatmanız gerekmektedir.

Kataloğun Kapsamını Belirleme

Kataloğu oluşturduktan sonra, kataloğun kapsamını belirlememiz gerekmektedir. Bunun anlamı arama yapıldığında bakılacak yerlerdir. Bir ya da daha fazla konum yaratılabilir.

  • Oluşturulan katalog (WebDosya) üzerinde sağ tuş kısayol menüsünden, New > Direcory seçilir.

 

  • Path için Dosyalar klasörü seçilir.
  • Include in Index alanının Yes olarak işaretli olduğundan emin olunuz.

Web Uygulaması

Search adlı web sitesindeki, arama sayfasının içeriği aşağıdaki gibidir.

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="ContentSearch.aspx.vb" Inherits="ContentSearch" %>

                 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

                 

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

    <title>ARAMA</title>

</head>

<body>

    <form id="form1" runat="server">

           <table border="0" cellpadding="3" cellspacing="3">

            <tr>

                <td>Aranacak Kelime/Ifadeyi Giriniz</td>

                <td><asp:TextBox ID="TextBox1" runat="server"/></td>

            </tr>

            <tr>

                <td align="center" colspan="2">

                <asp:Button ID="Button1" runat="server" Text="Ara"/></td>

            </tr>

            <tr>

                <td colspan="2" align="center">

                    <asp:GridView ID="GridView1" runat="server"

                        AutoGenerateColumns="False" ShowHeader="False">

                        <Columns>

                        <asp:BoundField DataField="filename"/>

                        <asp:TemplateField>

                            <ItemTemplate>

                                <asp:HyperLink ID="HypLnk1" runat="server"

                                    NavigateUrl='<%# "/Search/Dosyalar/" & Eval("filename") %>'   

                                    Target="_blank" Text="Dosyayı Aç"/>

                             </ItemTemplate>

                        </asp:TemplateField>

                        </Columns>

                    </asp:GridView>

                </td>

            </tr>

        </table>

     </form>

</body>

</html>

Seneryoya göre, Ara düğmesine tıklanıldığında, Textbox kontrolün içerisine girilen metin/ifade, Dosyalar klasörün içerisindeki tüm dosya içeriklerinde aranır ve sonuç GridView kontrolünde listelenir. Ve listede istenilen dosyanın linkine tıklanarak, dosya açılır.

Sorgulama

"Provider=MSIDXS;Integrated Security .='';Data Source='WebDosya'"


Standart OLEDB data provider kullanarak, Indexing Server kataloğunu sorgulayabilirsiniz. Bu işlem için, bağlantı dizisi, MSIDXS (Microsoft Indexing Server) OLEDB data providerını çağırır ve  veri kaynağı olarak kataloğun adı verilir.


    

SELECT Select_List | *

           FROM {[Server_Name.][Catalog_Name..]Predefined_View_Name
    |

                 [Server_Name.][Catalog_Name..]View_Name
    |

                 [Server_Name.][Catalog_Name..]SCOPE(['Scope_Arguments'])
    |

                (TABLE [Server_Name.][Catalog_Name..]SCOPE(['Scope_Arguments'])
    

                 UNION ALL TABLE [Server_Name.][Catalog_Name..]SCOPE(['Scope_Arguments'])
    

                [UNION ALL TABLE [Server_Name.][Catalog_Name..]SCOPE(['Scope_Arguments'])
    

                 ...])}

           [WHERE_Clause]

           [ORDER_BY_Clause]

From ifadesinde sorgulanacak kapsam tanımlanır. From ifadesinin ana bileşeni olan SCOPE fonksiyonu sıfır ya da daha fazla arguman değeri alabilir. Eğer arguman değeri almıyorsa, varsayılan konumda arama yapılır.

Select ifadesinde, DocTitle,Filename,Size,PATH, DocAuthor, write kullanarak, dosyanın özelliklerine ulaşabilirsiniz.
Where ifadesinde kullanılabilen FULLTEXT ile, arama için girilen ifade ya da metin çözümlenerek, benzer kayıtlar listelenir.

Örneğimize dönecek olursak, düğmeye tıklanıldığında çalışacak kodlar aşağıdaki gibidir;


Imports System.Data

Partial Class ContentSearch

    Inherits System.Web.UI.Page

           

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim tsql As String

        tsql = "Select Filename from SCOPE() where FREETEXT('" & TextBox1.Text & "')"

      

        Dim connString As String = "Provider=MSIDXS;Integrated Security .='';Data Source='WebDosya'"

           

        Dim cn As New System.Data.OleDb.OleDbConnection(connString)

        Dim cmd As New System.Data.OleDb.OleDbDataAdapter(tsql, cn)

        Dim ds As New DataSet()

           

        cmd.Fill(ds)

           

        Dim source As New DataView(ds.Tables(0))

        GridView1.DataSource = source

        GridView1.DataBind()

    End Sub

End Class


"The 'MSIDXS' provider is not registered on the local machine." Hatası

Eğer örneği tamamlayıp, çalıştırdığınızda "The 'MSIDXS' provider is not registered on the local machine." hatasını alıyorsanız. Aşağıdaki yönetimi izleyerek, hatanın çıkmasını önleyebilir, örneği çalıştırabilirsiniz;

  • Start > Run seçip, regedit yazıp OK tıklayın.
  • HKEY_CLASSES_ROOT altında bulunan, MSIDXS ulaşınız.
  • MSIDXS sağ tuş kısayol menüsünden Permissions tıklayınız. Permissions for MSIDXS diyalog kutusu görüntülenir.
  • Group or user names listesinde bulunan SYSTEM seçiniz ve eğer seçili değilse Allow kısmında bulunan Full Control onay kutusunu işaretleyiniz.
  • Group or user names listesinde bulunan ASPNET seçiniz (Eğer listede yoksa ekleyiniz) ve eğer seçili değilse Allow kısmında bulunan Full Control onay kutusunu işaretleyiniz.
  • Permissions for MSIDXS diyalog kutusunu kapatmak için OK tıklayınız.
  • Registry Editor kapatınız.