2013-06-27 11 views
6

Sto cercando di impostare un indice di ricerca molto semplice, per indicizzare tutti gli elementi in una cartella specifica. Non ho usato molto la ricerca, ma sto cercando di utilizzare le funzionalità out-of-the-box, perché è una ricerca molto semplice. Voglio solo indicizzare tutti i campi. La documentazione del sitecore in realtà non fornisce molte informazioni - ho letto alcuni blog, e tutti sembrano suggerire che ho bisogno del crawler di database avanzato (http://trac.sitecore.net/AdvancedDatabaseCrawler) - fondamentalmente, qualcosa con l'effetto di 'non funzionerà senza un crawler personalizzato).Uso di base della ricerca sitecore

È giusto? Voglio solo creare un indice semplice, e quindi iniziare a usarlo. Qual è il modo più semplice per farlo, senza moduli condivisi o altro? Ho esaminato la documentazione su sitecore, ma non è molto chiara (almeno per me). Definisce diversi elementi della configurazione dell'indice in web.config, ma in realtà non spiega cosa fanno e quali valori sono disponibili. Forse io non sto cercando nel posto giusto ..

+0

Si prega di consultare il mio post M.R. –

+0

@ M.R. Ho incluso la spiegazione della configurazione dell'indice ** di Lucene ** in ** Sitecore ** e codice funzionante per ottenere elementi dagli indici personalizzati. –

+0

Se hai la possibilità di scegliere Sitecore 7 [questo documento] (http://sdn.sitecore.net/Reference/Sitecore%207/Sitecore%20Search%20and%20Indexing%20Guide.aspx) dovrebbe aiutare. –

risposta

14

Un modo semplice per creare nuovi Lucene indice in Sitecore con tutti gli elementi sotto il nodo specifico in soli 3 passaggi:

1: Aggiungere la configurazione di seguito per la configurazione configuration/sitecore/search/configuration/indexes in Sitecore:

<!-- 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: Ricostruire il nuovo indice (una sola volta, tutte le ulteriori modifiche sarà rilevato automaticamente):

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

3: Utilizzare il nuovo indice:

// 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(); 
} 

Qui è un pdf che descrive Sitecore Search and Indexing.

E qui c'è un post sul blog su Troubleshooting Sitecore Lucene search and indexing.

Ecco Lucene query syntax tutorial

e Introducing Lucene.Net

+0

Sì, è passato attraverso quel documento (come menzionato nella domanda). Non era molto chiaro per me, quindi la domanda. –

-2

Brian Pedersen ha un bel post su di esso. Inizierai con un semplice crawler. È necessario scaricare Advanced Database Crawler e aggiungere il riferimento al progetto dopo averlo creato.

Quindi devi creare i file di configurazione menzionati nel blog di Brian e devi copiare così com'è (tranne che per l'id del modello n tutti). Ottieni il punto fondamentalmente qui.

Quindi è possibile scaricare l'estensione Lucene Index Viewer per Sitecore per visualizzare l'indice oppure è possibile scaricare Lucene Tool per visualizzare gli indici. Vedi se riesci a popolare i documenti (file nei tuoi indici). Si chiamano "Documenti" in Lucene e tecnicamente questi documenti sono elementi di contenuto presenti sotto il nodo specificato.

Spero che questo aiuti!

Let me google that for you.

+0

Non è il mio downvote, ma qualche intuizione: Il visualizzatore di indici Lucene non funziona bene con sitecore 6.5+ a causa di una mancata corrispondenza della versione nell'implementazione nativa di Lucene.NET in Sitecore che è stato aggiornato. Per quanto riguarda la necessità di Advanced Database Crawler, beh, non ce n'è davvero una. L'OP sta richiedendo un'implementazione semplice, mentre l'utilizzo di Advanced Database Crawler sarebbe per approcci di indicizzazione della ricerca più personalizzati e non convenzionali: l'utente medio non ne ha bisogno. – mmmeff

3

Sitecore Ricerca Contrib (nuovo nome per crawler avanzato database) è l'opzione migliore, è sufficiente configurare la sua configurazione nella cartella config app di raccontarla iniziare database di percorso, ecc

È quindi possibile usa la sua API per cercare all'interno di cartelle, per tipo di modello, dove un determinato campo ha un certo valore. Ecco un esempio di codice.

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; 

// L'attuale ricerca

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; 

Altrimenti si può solo configurare il web.config per la ricerca Lucene standard ed utilizzare questo codice per la ricerca. (Base dati per utilizzare "web", avviare voce 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

quindi è possibile scaricare l'estensione Lucene Index Viewer per Sitecore per visualizzare l'indice o è possibile scaricare lo strumento di Lucene per visualizzare gli indici. Vedi se riesci a popolare i documenti (file nei tuoi indici). Questi sono chiamati "Documenti" in Lucene e tecnicamente questi documenti sono elementi di contenuto presenti sotto il nodo che hai specificato.