Laden...

Umstieg Indexing Service Win2003 Server auf Win2012 Server Windows Search

Erstellt von RBA285 vor 11 Jahren Letzter Beitrag vor 11 Jahren 2.974 Views
R
RBA285 Themenstarter:in
68 Beiträge seit 2010
vor 11 Jahren
Umstieg Indexing Service Win2003 Server auf Win2012 Server Windows Search

Hallo Zusammen,

bin gerade am Migrieren einer 3.5 ASP.NET Webapplikation (C#, Server 2003) auf einen Windows 2012 Server mit .NET 4.5. Dabei hänge ich bei der implementierten Volltextsuche des Web-Contents im Userfrontend, die auf einen Catalog des Indexing-Service aufgesetzt ist (Windows 2003 Server). Was ich durch intensiveres Googeln herausgefunden habe ist, dass der Indexing Service im 2012 Server wohl nicht mehr existiert und stattdessen Windows Search verwendet werden soll. Hat jemand von euch Erfahrung, bzw. ein Codebeispiel in C#, wie man Windows Search für eine Volltextsuche eines Web-Contents verwendet (wird auf der Website angeboten)? Bisher wurde das in der Applikation so gelöst (mit Indexing-Service über einen Catalog, gleichzeitig werden gewisse Verzeichnismuster und Files herausgefiltert):


        public bool Search(string txtSearch)
        {
            bool bError = false;

            OleDbConnection odbSearch = new System.Data.OleDb.OleDbConnection();
            OleDbCommand cmdSearch = new System.Data.OleDb.OleDbCommand();
            OleDbDataReader rdrSearch;

            this._searchItems.Clear();

            //assign the connecting string to the oledb connection object , replace Catalog Name with the name of index catalog created earlier 
            odbSearch.ConnectionString = "Provider=\"MSIDXS\";Data Source=\"AppCatalog\";";
            //assign connection to command object cmdSearch 
            cmdSearch.Connection = odbSearch;

            //Query to search a free text string in the catalog in the contents of the indexed documents in the catalog 

            try
            {
                // Make freetext search in the contents and retreive document titles , path , rank from the index catalog
                cmdSearch.CommandText = "SELECT doctitle, filename, vpath, rank, characterization, size FROM SCOPE('DEEP TRAVERSAL OF \"\\\"') WHERE " +
                                        "CONTAINS(Contents, '\"" + txtSearch + "\"') AND " +
                                        "NOT CONTAINS(vpath, '\"_vti_\" OR \".config\"') AND " +
                                        "NOT CONTAINS(filename, '\".cs\" OR \".css\" OR \".txt\" OR \".config\"') AND " +
                                        "CONTAINS(filename, '\".aspx\" OR \".htm\" OR \".html\"') " +
                                        "ORDER BY RANK DESC";
                odbSearch.Open();
                try
                {
                    rdrSearch = cmdSearch.ExecuteReader();

                    while (rdrSearch.Read())
                    {
                        this._searchItems.Add(new SearchItem(rdrSearch[0].ToString(), rdrSearch[1].ToString(), rdrSearch[2].ToString(), rdrSearch[3].ToString(), rdrSearch[4].ToString(), rdrSearch[5].ToString()));
                    }
                }
                catch (Exception ex)
                {
                    bError = true;
                }
                odbSearch.Close();
            }
            catch (Exception ex)
            {
                bError = true;
            }

            return (!bError);
        }


Danke euch!
Gruß
Robin

R
RBA285 Themenstarter:in
68 Beiträge seit 2010
vor 11 Jahren

Ok, Problem gelöst, funktioniert mit Windows Search (fast) identisch, habe mir das komplizierter vorgestellt. Wer auch vor diesem Problem steht, folgende Hinweise zur Migration:

  1. Zuerst das betreffende Web in den Search-Index aufnehmen. Über Charms-Leiste nach "Indizierungsoptionen" suchen und Programm starten. Web in die Indizierung aufnehmen (z.B. C.\intetpub\myweb), fertig. Windows Search muss natürlich als Dienst laufen.

  2. Im Source OLEDB von Index-Server Suche auf Windows Search umstellen:

odbSearch.ConnectionString = "Provider=Search.CollatorDSO;Extended Properties=\"Application=Windows\"";
            
cmdSearch.Connection = odbSearch;

cmdSearch.CommandText = "SELECT System.Title, System.FileName, System.ItemPathDisplay, System.Search.Rank, System.FileDescription, System.Size" +
                                    " FROM SystemIndex WHERE SCOPE='file:C:/inetpub/myweb' AND CONTAINS('" + txtSearch + "')" +
                                    " AND  (System.FileExtension=\'.aspx\' OR System.FileExtension=\'.pdf\')" +
                                    " ORDER BY System.Search.Rank";

odbSearch.Open();

Achtung: Die Felder und deren Inhalte unterscheiden sich zum Teil von denen, die man im Index Search verwenden konnte. Z. B. gibt es keinen vPath mehr. Da muss man sich eine kleine Funktion basteln, die aus dem absoluten Pfad den Web-Pfad bastelt.

Eine Übersicht der zur Verfügung stehenden Felder und Attribute für die Search gibt es hier:
System

Infos zum verwendeten SQL-Syntax für die Suche gibt es hier:
Querying the Index with Windows Search SQL Syntax

Robin