Umbraco Examine

O que é Umbraco Examine?

Examine é uma solução para realizar pesquisas no Umbraco. Ele usa o motor de indexação Lucene.NET tornando fácil e rápido realizar pesquisas em grande quantidade de dados.

Umbraco Examine é muito extensível e permite que você configure muitos índices conforme sua necessidade e cada um pode ser configurado individualmente. 

Como qualquer configuração no Umbraco, Examine é configurado na pasta "Config".

/Config/ExamineIndex.config
/Config/ExamineSettings.config

ExamineIndex.config 
Neste arquivo que é definido um novo indexset. Indexset contém a informação sobre qual doctypes e campos queremos indexar. Por exemplo:

<IndexSet SetName="MySearch" IndexPath="~/App_Data/ExamineIndexes/MySearch/">
    <IndexAttributeFields>
      <add Name="id" />
      <add Name="nodeName"/>
      <add Name="updateDate" />
      <add Name="writerName" />
      <add Name="nodeTypeAlias" />
    </IndexAttributeFields>
    <IndexUserFields>
      <add Name="bodyText"/>
      <add Name="siteName"/>
    </IndexUserFields>
    <IncludeNodeTypes>
      <add Name="umbHomePage" />
      <add Name="umbNewsItem" />
      <add Name="umbTextPage" />
    </IncludeNodeTypes>
  </IndexSet>

SetName é o alias para ser usado nos providers.

IndexAttributeFields define todos os campos Umbraco padrão.

IndexUserFields é o alias dos campos personalizados que você adicionou a seus doctypes.

IncludeNodeTypes é o alias dos doctypes você deseja pesquisar.

ExamineSettings.config

Dentro do arquivo examinesettings.config é onde são definidos os providers (Índice e pesquisa). 

 <add name="MySearchIndexer" type="UmbracoExamine.UmbracoContentIndexer, UmbracoExamine"
      supportUnpublished="false"
      supportProtected="true"
      interval="10"
      analyzer="Lucene.Net.Analysis.Standard.StandardAnalyzer, Lucene.Net"
      indexSet="MySearch"/>

O código abaixo vai receber por querystring o texto para pesquisar. Exemplo de como ficaria uma pesquisa simples usando o provider configurado acima.

Url ficaria assim: http://www.dominio.com.br/pesquisa.aspx?q=lorem ipsum

@inherits umbraco.MacroEngines.DynamicNodeContext
@using Examine.LuceneEngine.SearchCriteria
@{
    if (!string.IsNullOrEmpty(Request.QueryString["q"]))
    {

        //Texto passado por querystring
        var q = Request.QueryString["q"];

        //Pega o provedor de pesquisa MySearchSearcher configurado
        var Searcher = Examine.ExamineManager.Instance.SearchProviderCollection["MySearchSearcher"];
        
        //Ordena os resultados
        var searchResults = Searcher.Search(q, true).OrderByDescending(x => x.Name);
           
        //Exibe os resultados  
    <ul>
        @foreach (var item in searchResults)
        {
            var node = Model.NodeById(item.Fields["id"]);
            <li>
                <a href="@node.NiceUrl">
                    @node.Name 
                </a>
            </li>
        }
    </ul>
    }
}

Esse código pode ser usando em um macro ou no template.

Isso é tudo!