2013-06-27 28 views
6

Próbuję ustawić bardzo prosty indeks wyszukiwania, aby zindeksować wszystkie elementy w określonym folderze. Nie używałem zbyt wielu wyszukiwań, ale staram się korzystać z gotowych funkcji, ponieważ jest to bardzo proste wyszukiwanie. Chcę tylko zindeksować wszystkie pola. Dokumentacja sitecore naprawdę nie dostarcza wielu informacji - przeczytałem kilka blogów i wszystkie wydają się sugerować, że potrzebuję zaawansowanego przeszukiwacza baz danych (http://trac.sitecore.net/AdvancedDatabaseCrawler) - w zasadzie coś na efekt "to nie zadziała bez niestandardowy robot).Bardzo podstawowe zastosowanie wyszukiwania Sitecore

Czy to prawda? Chcę tylko utworzyć prosty indeks, a następnie zacząć go używać. Jaki jest najprostszy sposób na to, bez żadnych wspólnych modułów lub w inny sposób? Przeszedłem przez dokumentację na sitecore, ale jej niezbyt jasne (przynajmniej dla mnie). Definiuje różne elementy konfiguracji indeksu w pliku web.config, ale tak naprawdę nie wyjaśnia, co robi i jakie wartości są dostępne. Może ja nie szukam w odpowiednim miejscu ..

+0

Proszę zobaczyć mój wpis M.R. –

+0

@ M.R. Zawarłem wyjaśnienie konfiguracji indeksu ** Lucene ** w ** Sitecore ** i działający kod do pobierania elementów z niestandardowych indeksów. –

+0

Jeśli masz możliwość wyboru Sitecore 7 [ten dokument] (http://sdn.sitecore.net/Reference/Sitecore%207/Sitecore%20Search%20and%20Indexing%20Guide.aspx) powinien pomóc. –

Odpowiedz

14

prosty sposób tworzenia nowego Lucene indeks Sitecore wszystkie elementy poniżej określonego węzła w zaledwie 3 krokach:

1: Dodaj konfigurację poniżej do configuration/sitecore/search/configuration/indexes w Sitecore konfiguracji:

<!-- id must be unique --> 
<index id="my-custom-index" type="Sitecore.Search.Index, Sitecore.Kernel"> 
    <!-- name - not sure if necessary but use id and forget about it --> 
    <param desc="name">$(id)</param> 
    <!-- folder - name of directory on the hard drive --> 
    <param desc="folder">__my-custom-index</param> 
    <!-- analyzer - reference to analyzer defined in Sitecore.config --> 
    <Analyzer ref="search/analyzer" /> 
    <!-- list of locations to index - each of the with unique xml tag --> 
    <locations hint="list:AddCrawler"> 
    <!-- first location (and the only one in this case) - specific folder from you question --> 
    <!-- type attribute is the crawler type - use default one in this scenario --> 
    <specificfolder type="Sitecore.Search.Crawlers.DatabaseCrawler,Sitecore.Kernel"> 
     <!-- indexing itmes from master database --> 
     <Database>master</Database> 
     <!-- your folder path --> 
     <Root>/sitecore/content/home/my/specific/folder</Root> 
    </specificfolder> 
    </locations> 
</index> 

2: odbudować nowy wskaźnik (tylko jeden raz, wszystkie dalsze zmiany są wykrywane automatycznie)

SearchManager.GetIndex("my-custom-index").Rebuild(); 

3: pomocą Nowy indeks:

// use id of from the index configuration 
using (IndexSearchContext indexSearchContext = SearchManager.GetIndex("my-custom-index").CreateSearchContext()) 
{ 
    // MatchAllDocsQuery will return everything. Use proper query from the link below 
    SearchHits hits = indexSearchContext.Search(new MatchAllDocsQuery(), int.MaxValue); 
    // Get Sitecore items from the results of the query 
    List<Item> items = hits.FetchResults(0, int.MaxValue).Select(result => result.GetObject<Item>()).Where(item => item != null).ToList(); 
} 

Oto PDF opisujący Sitecore Search and Indexing.

Tutaj znajduje się wpis na blogu na temat Troubleshooting Sitecore Lucene search and indexing.

Oto Lucene query syntax tutorial

i Introducing Lucene.Net

+0

Tak, przeszedł ten dokument (jak wspomniano w pytaniu). Nie było dla mnie jasne, stąd pytanie. –

-2

Brian Pedersen ma ładny post na niego. Zaczynasz od prostego robota. Musisz pobrać zaawansowany przeszukiwacz bazy danych i dodać referencję do projektu po jego zbudowaniu.

Następnie należy utworzyć pliki konfiguracyjne, które są wymienione w blogu Briana i należy je skopiować w obecnej postaci (z wyjątkiem szablonu id n). Zasadniczo tutaj masz rację.

Następnie można pobrać rozszerzenie Lucene Index Viewer dla Sitecore, aby wyświetlić indeks lub pobrać narzędzie Lucene, aby wyświetlić indeksy. Sprawdź, czy możesz wypełnić dokumenty (pliki w indeksach). Są one nazywane "Dokumenty" w Lucene i technicznie te dokumenty są treścią obecną w określonym węźle.

Mam nadzieję, że to pomoże!

Let me google that for you.

+0

Nie moja propozycja, ale pewne spostrzeżenia: Przeglądarka indeksu Lucene nie gra dobrze z Sitecore 6.5+ ze względu na niezgodność wersji w natywnej implementacji Lucene.NET w Sitecore po aktualizacji. Jeśli chodzi o Need for Advanced Database Crawler, cóż, tak naprawdę nie ma takiego. OP prosi o prostą implementację, podczas gdy użycie Zaawansowanego Przeszukiwacza Danych byłoby bardziej niestandardowe i niekonwencjonalne podejście do indeksowania wyszukiwania - przeciętny użytkownik tego nie potrzebuje. – mmmeff

3

Sitecore Szukaj Contrib (nowa nazwa dla zaawansowanego robota bazy danych) jest najlepszym rozwiązaniem, wystarczy skonfigurować swój config w folderze app config, aby poinformować go uruchomić bazę ścieżki itd

Następnie można użyj swojego API do wyszukiwania w folderach według typu szablonu, w którym określone pole ma określoną wartość. Oto przykład kodu.

MultiFieldSearchParam parameters = new MultiFieldSearchParam(); 

parameters.Database = "web"; 
parameters.InnerCondition = QueryOccurance.Should; 
parameters.FullTextQuery = searchTerm;   
parameters.TemplateIds = array of pipe seperated ID's 

var refinements = Filters.Select(item => new MultiFieldSearchParam.Refinement(item.Value, item.Key.ToString())).ToList(); 

parameters.Refinements = refinements; 

// Rzeczywista Szukaj

var returnItems = new List<Item>(); 
var runner = new QueryRunner(IndexName); 
var skinnyItems = runner.GetItems(new[] {parameters}); 
skinnyItems.ForEach(x => returnItems.Add(Database.GetItem(new ItemUri(x.ItemID)))); 
return returnItems; 

przeciwnym razie można po prostu skonfigurować web.config dla standardowego wyszukiwania Lucene i użyć tego kodu do przeszukania. (Bazy danych, aby używać „web”, start pozycję etc)

public Item[] Search(string searchterms) 
     { 
      var children = new List<Item>(); 

      var searchIndx = SearchManager.GetIndex(IndexName); 

      using (var searchContext = searchIndx.CreateSearchContext()) 
      { 
       var ftQuery = new FullTextQuery(searchterms); 
       var hits = searchContext.Search(ftQuery); 
       var results = hits.FetchResults(0, hits.Length); 

       foreach (SearchResult result in results) 
       { 
        if (result.GetObject<Item>() != null) 
        { 
         //Regular sitecore item returned  
         var resultItem = result.GetObject<Item>(); 

         if (ParentItem == null) 
         { 
          children.Add(resultItem); 
         } 
         else if (resultItem.Publishing.IsPublishable(DateTime.Now, false) && 
           ItemUtilities.IsDecendantOfItem(ParentItem, resultItem)) 
         { 
          children.Add(resultItem); 
         } 
        } 
       } 
      } 
      return children.ToArray(); 
     } 
0

Następnie można pobrać rozszerzenie Lucene Index Viewer dla Sitecore aby zobaczyć indeks lub można pobrać Lucene Narzędzie do przeglądania indeksów. Sprawdź, czy możesz wypełnić dokumenty (pliki w indeksach). Są one nazywane "Dokumentami" w Lucene i technicznie te dokumenty są elementem zawartości obecnym w określonym węźle.