Introdução

Os facets representam uma solução interessante quando o assunto é usabilidade na busca por conteúdo em aplicações web.

A escolha do Search API como carro chefe da implementação da nossa busca se dá por três motivos:

  • Eficiente para grande volumes de dados.

  • Flexibilidade para construir vários perfis de busca.

  • Boa integração com o Facet API.


Nessa série de posts vamos implementar um exemplo simples de busca facetada em um site Drupal contendo 3 tipos de conteúdo: Events, Blog posts e Wiki. O resultado será este:

Figura 1: Busca facetada ao final do passo a passo.

 

Alguns aqui podem estar se perguntando:

 

A minha resposta:

 

Facets são daora. Na figura 1, cada um dos filtros na barra lateral esquerda representa um facet.

Os módulos necessários para efetuar o passo a passo a seguir são:

 

Bom, vamos ao que interessa.

Antes de prosseguir, é importante ativar os múdulos Search facets, Search views, e Context UI. Os dois primeiros são submódulos do Search API e o último do Context.

 

Passo 1: Criar um server.

A criação do server pode ser feita tanto pelo módulo Search API Database como pelo módulo Apache Solr Search.

O uso do Apache Solr Search é encorajado em sites com volumes gigantescos de dados e em sites que necessitam efetuar busca por conteúdo de arquivos PDF, já que é integrável com o Tika.

Escolhi o Search API Database porque não depende da instalação de um servidor Solr, simplificando o processo. De qualquer forma, o modo de configurar o Search API é o mesmo, independente do server adotado.

 

Acessar Configuration > Search API > Add Server.

Figura 2: Página de criação de server

 

Passo 2: Configurar um Index.

Um index é um perfil do Search API de indexação de campos. Definir um index é decidir quais campos são relevantes para a nossa página de busca. Uma vez selecionados, os campos serão armazenados nas tabelas do Search API Database e ficarão disponíveis na configuração dos facets e na configuração da view de busca.

 

2.1: Página de criação do index.

Acessar Configuration > Search API > Add Index.

Primeiramente, define-se o nome do index, o tipo de item que será indexado (no nosso caso, node) e o server utilizado (que definimos no passo 1).


Figura 3: Página de criação de index

 

2.2: Página de campos do index.

Após salvar o novo index, somos redirecionados para a página de definição dos campos a serem indexados.


Figura 4: Página de campos do index

 

Para o nosso exemplo, escolhi os campos listados abaixo. Cada um deles representará um facet:

  • Content type (String)

  • Date created (Date)

  • Author (User)

  • Tags (Taxonomy term)

 

É importante indexar também os campos que serão buscáveis na caixa de texto da Figura 1. Para isso, precisamos marcá-los como tipo Fulltext. No nosso caso, seria interessante que o usuário pudesse pesquisar por Title (Título) e Body (Corpo do texto).

 

A adição do Title é feita da mesma forma que os outros campos, porém para adicionar o campo Body é necessário um passo extra. Em Add Related Fields, selecionar The main body text e clicar em Add fields:


Figura 5: Disponibilizando o campo Body para indexação.

 

Após isso, o campo The main body text >> Text estará disponível para indexação na listagem de campos.


Figura 6: Indexando campo Body.

 

Os campos marcados como Fulltext possuem uma opção extra: Boost. Essa opção permite quantificar relevância ao campo na busca por texto. Quanto maior o boost, maior a relevância.


Figura 7: Boost de um campo Fulltext.

 

2.3: Página de workflow do index.

Definidos os campos, acessando a aba Workflow temos ao nosso dispor algumas configurações para o index. Para o nosso caso, vamos selecionar apenas Exclude unpublished nodes, que vai impedir que conteúdo não publicado apareça nos resultados da busca.


Figura 8: Página de Workflow de index.
 

2.4: Página de facets.

Na aba Facets, definimos quais facets serão exibidos na página de busca.

Figura 9: Página de Facets do index

 

Uma página completa de configurações para cada facet pode ser acessada pelos botões configure display. Ali é possível definir comportamentos como mostrar ou não contador, exibir ou não facet vazio, granularidade de data, dentre outros.

Figura 10: link para configuração de um determinado facet.

 

Para o nosso caso, vamos configurar o facet de data de criação (Created Date) para que a granularidade seja de mês, e não de minuto (padrão).

Figura 11: configurando granularidade do facet de data de criação.

 

2.4: Indexando conteúdo.

Após isso, é recomendado rodarmos o indexador. Se o cron do Drupal estiver corretamente configurado, o sistema indexa periodicamente um certo número de itens (esse número pode ser configurado na página descrita pela Figura 3). Por isso é importante garantir que o cron esteja funcionando para que novos conteúdos sejam indexados conforme são cadastrados.

Apesar do cron, precisamos garantir que todo conteúdo esteja indexado antes de construirmos a página de busca em si.

Acessar a aba Status e clicar em Index now.

Figura 12: Página de status do index.

 

Atenção: se eventualmente ocorrerem alterações nas configurações do index, para muitos casos é necessário re-indexar todo o conteúdo do site (por exemplo, alterar campos do passo 2.2).

 
 
Vamos dar uma pausa. No próximo post da série vamos construir a view de busca e juntá-la com os facets.
 
Até a próxima!

Comentar