Objetivos
-
Definir o conceito de Indexação e Busca, apresentando o serviço nativo;
-
Apresentar possibilidades de extensão do mecanismo de busca;
-
Definir os passos necessários para o perfeito funcionamento do serviço de busca;
-
Entender a API de indexação disponibilizada pelo Lumis Portal;
Introdução ao mecanismo de Busca
O Lumis Portal possui um serviço nativo para permitir buscas por conteúdos cadastrados no Portal, exibindo informações sobre os itens relacionados com o termo buscado e permitindo a navegação para os conteúdos através de uma página de resultados de busca.
Tal mecanismo permite a busca de conteúdos cadastrados em diversos serviços, como o serviço de Notícias, por exemplo. Além da busca por conteúdo textual cadastrado, caso seja utilizado o conector padrão da ferramenta – o Lucene – podem ser encontrados também conteúdos em arquivos anexados do tipo TXT, PDF, HTML, arquivos do Microsoft Office (da versão 97 a 2007) e OpenOffice (a partir da versão 1.0).
O mecanismo de indexação permite que o conteúdo seja “catalogado” e, a partir deste momento, disponível para buscas no Portal.
As próximas seções abordarão o funcionamento do serviço nativo de Busca do Lumis Portal, suas características e as definições necessárias para utilização do serviço de forma efetiva.
O serviço de Busca nativo do Lumis Portal
Este serviço permite que conteúdos sejam buscados no Portal, apresentando seus resultados em uma listagem simples e permitindo aos usuários navegar para estes conteúdos.
O serviço possui, basicamente, uma interface de Busca, onde o usuário informa o termo que deseja buscar; e uma interface para exibição dos resultados encontrados.
A interface de busca pode ser instanciada em qualquer página do Portal, sendo normalmente utilizada em páginas de destaque (como em Homes, por exemplo), ou no cabeçalho de todo o portal. Esta interface consiste em uma caixa de texto para entrada do termo a ser pesquisado e um botão para efetuar a busca. A Figura apresenta esta interface.
A busca de um termo leva o usuário para a página que contenha uma interface de “Busca com Resultados”; esta possui a mesma caixa de texto para busca (permitindo efetuar uma nova busca) da interface anterior e os resultados encontrados na busca previamente realizada. Figura No exemplo apresentado na figura 2, a busca retorna o nome do conteúdo, sua introdução e uma imagem de introdução.
O resultado da busca é uma lista de todos os conteúdos encontrados, aprovados e que se encontram no período de publicação aos quais o usuário possui permissão de visualização e cujo idioma é o mesmo em que o usuário está navegando no Portal.
Para maiores informações sobre configuração de idiomas para os conteúdos do Portal, pesquisar sobre o serviço “Selecionador de Localização” e o item “Publicação Multilíngüe”, no menu “Serviços ? Funcionalidades Gerais dos Serviços de Gestão de Conteúdo”, na documentação do produto.
Os resultados encontrados pela busca podem ser ordenados de três formas diferentes: Relevância, Título ou Data de Publicação. É possível ainda inverter a ordenação em alguns destes casos através do checkbox “Inverter Ordenação”.
-
Relevância: Os conteúdos mais relevantes aparecerão em ordem decrescente, do mais relevante ao menos relevante, não sendo neste caso possível a inversão da ordenação;
-
Título: Os conteúdos serão apresentados ordenados por título, e por padrão, em ordem alfabética e numérica crescente. No entanto, é possível utilizar a funcionalidade de inversão da ordenação, caso desejado;
-
Data de Publicação: Os conteúdos serão apresentados ordenados pela data de publicação e, por padrão, a ordenação será realizada a partir dos mais antigos para os mais recentes. No entanto, é possível utilizar a funcionalidade de inversão da ordenação, caso desejado;
Há diversas opções de termos de busca que podem ser utilizados para buscar o conteúdo desejado. O Lumis Portal utiliza o Apache Lucene como motor de busca, podendo ser utilizadas todas as regras de busca que a ferramenta torna disponíveis. A seguir, algumas regras são listadas, com dicas para a digitação de termos de pesquisa:
-
Caracter Coringa: Pode-se utilizar o caracter “*” (asterisco) como coringa para buscar por partes de palavras.
-
Exemplo: “Not*” retornaria resultados para Notícia, Notícias, etc.
-
-
Sensibilidade a maiúsculas e acentos: Por padrão a busca desconsidera maiúsculas e minúsculas e caracteres acentuados.
-
Exemplo: “notícia” retornaria resultados para Notícia, NOTÍCIA, Noticia (sem acento agudo), etc.
-
-
Operadores especiais: Pode-se utilizar os operadores OR, AND e “” para refinar a busca no Portal.
-
Exemplos:
-
“Rio de Janeiro” retornaria resultados que contivessem a expressão inteira;
-
Lumis Portal retornaria resultados que contivessem as palavras Lumis ou Portal. O comportamento seria similar ao pesquisar por Lumis OR Portal;
-
Lumis AND Portal retornaria resultados que contivessem as duas palavras, por completo;
-
-
Para saber mais sobre como utilizar os recursos disponíveis para refinamento das buscas, consulte a documentação oficial do projeto Lucene em http://lucene.apache.org/java/1_4_3/queryparsersyntax.html.
A montagem do serviço de busca merece atenção especial, uma vez que o local onde ele é instanciado na estrutura do Portal interfere diretamente no escopo da busca. O serviço de busca localizará informações buscáveis apenas nos canais e páginas no mesmo nível ou abaixo do canal onde o serviço de Busca foi instanciado.
Por exemplo, considerando a estrutura de canas na Figura teríamos as seguintes configurações e resultados:
-
Busca Instanciada em “Portal”:
-
Seriam buscadas informações que estivessem nos canais Avisos, Notícias (e seus subcanais);
-
-
Busca instanciada em Avisos:
-
Seriam buscadas informações que estivessem no canal Avisos e suas páginas e subcanais;
-
-
Busca instanciada em Notícias:
-
Seriam buscadas informações que estivessem em serviços nas páginas do canal Notícias e nos subcanais Clipping e Releases (incluindo seus subcanais e páginas, recursivamente);
-
Sendo assim, caso a Busca tivesse sido instanciada no canal Notícias (seguindo o exemplo da Figura ), não seriam retornadas informações de serviços instanciados no canal Avisos.
Os campos retornados no resultado da busca podem ser configurados através de clique com botão direito na interface e escolhendo a opção “Campos”. A Figura apresenta a tela com os campos que podem ser adicionados à interface de busca com resultados.
Definindo serviços buscáveis
Alguns serviços nativos do Lumis Portal já estão definidos por padrão como ‘buscáveis’. No entanto, no momento da criação de um serviço customizado deve-se definir se o mesmo será buscável e qual será seu atributo de introdução.
Tal definição pode ser feita utilizando os atributos “isSearchable” e “isIntroduction”, inseridos na declaração dos fields do source do serviço em questão. Em casos onde seja necessário indexar o conteúdo de vários sources no mesmo DOUI, é possível aplicar os atributos “isSearchable” e “isIntroduction” nos campos de cada source desejado.
A listagem a seguir apresenta um trecho de arquivo douidefinition.xml onde os campos “description” e “introduction” estão marcados como buscáveis e o atributo “introduction” será utilizado como campo de introdução no resultado de busca.
<source id="solution" type="contentTable"> <table>lws_ProductSolution</table> <fields> <field id="id" display="false" name="STR_ID" dataType="guid" isPrimaryKey="true" /> <field id="description" name="STR_NAME" dataType="string" isPrimaryName="true" required="true" isSearchable="true" /> <field id="introduction" name="STR_INTRODUCTION" dataType="html" isIntroduction="true" isSearchable="true" /> </fields> </source>
Indexação de Conteúdo
Os serviços que possuírem atributos definidos como buscáveis (conforme exemplificado na seção anterior) terão seus conteúdos monitorados e os índices de busca serão atualizados automaticamente sempre que houver alterações nos conteúdos (adição, edição ou exclusão de dados, bem como publicação para instâncias).
Os índices de busca criados e atualizados pelo Lumis serão utilizados pelo serviço de Busca durante as pesquisas efetuadas pelos usuários. Este processo de indexação de conteúdos é executado (por padrão) pelo Lumis utilizando o framework Lucene, da Apache Software Foundation que pode ser encontrado no endereço http://lucene.apache.org/java/docs/index.html
Apesar do mecanismo de reindexação de conteúdo ser automaticamente executado a cada alteração nas informações, em alguns casos poderá ser necessário executar o processo de reindexação de conteúdos manualmente com, por exemplo:
Em um ambiente multi-server, quando um nó da rede ficar inoperante e sofrer atualizações de dados. Nestes casos o índice da busca ficará desatualizado, retornando dados antigos em uma próxima busca do usuário;
-
Ocorrer migração da base de dados;
Para efetuar a reindexação do conteúdo, basta acessar a interface administrativa do Portal (via F12) e navegar até a área “Busca ? Reindexação”, no menu “Módulos”.
A Figura apresenta a interface de reindexação contendo todos os serviços passíveis de busca instanciados no Portal até o momento. A partir deste ponto, basta selecionar um serviço e clicar em “Indexar Conteúdos”, no topo da tela.
Após a seleção do serviço, devem-se escolher as instancias de serviço que terão seus dados reindexados e clicar no botão “Indexar Conteúdos”, conforme apresentado na Figura .
Figura Reindexação de Serviços
O framework de Busca do Lumis Portal
O Lumis Portal possui um framework de busca que utiliza conectores para realizar a indexação e busca de conteúdos. Nativamente é utilizado o Lucene como mecanismo de busca. Outros conectores, por sua vez, podem ser implementados e integrados ao Lumis Portal.
Basicamente, a ferramenta utiliza dois tipos de componentes para estabelecer seu funcionamento: os Indexers e Searchers.
Um Indexer é responsável por manipular o trabalho de indexação de conteúdos, enquanto os Searchers são responsáveis por buscar os conteúdos previamente indexados pelos Indexers.
A indexação de conteúdos dentro de arquivos anexados depende do conector de busca utilizado. O conector embutido no Lumis Portal para o Lucene permite indexar arquivos texto (.txt), PDF, HTML, arquivos do Microsoft Office (97-2007) OpenOffice (1.0+).
Além do conteúdo, o framework de busca também passa para indexação seus metadados (por exemplo, para quais instâncias e usuários ele foi publicado). Essas informações podem ser utilizadas para filtrar os resultados na busca, exibindo somente os conteúdos relevantes para o usuário atual, incluindo filtragem a partir das permissões do usuário realizando a busca.
Configuração de Busca
O arquivo de configuração searchconfig.xml pode ser alterado para definição de novas configurações para o serviço de busca.
Através deste arquivo podemos alterar as configurações principais do mecanismo de indexação e busca para que, por exemplo, sejam utilizados outros Indexers ou Searches, personalizados para a aplicação.
É possível inserir nova classe para Analyzer, classes de filtros (TokenFilters) e Searcher através das tags “analyzer”, “tokenFilterClassName” e “searcher” respectivamente.
Os objetos TokenFilter são responsáveis por aplicar filtros com características especificas aos dados no momento da indexação. Por padrão, as linhas abaixo são comentadas no tag “indexer” por serem utilizadas na configuração padrão do Lumis. No entanto pode-se habilitar a tag “analyzer”e utilizar um dos TokenFilters (removendo o comentário, neste caso) como o “AccentFilter” (responsável por ignorar acentos no conteúdo indexado) ou ainda criar uma nova classe (sendo, neste caso, necessário estender a classe TokenFilter do Lucene).
> <analyzer className="lumis.search.lucene.LumisAnalyzer"> <tokenizerClassName>org.apache.lucene.analysis.standard.StandardTokenizer</tokenizerClassName> <tokenFilterClassName>org.apache.lucene.analysis.standard.StandardFilter</tokenFilterClassName> <tokenFilterClassName>org.apache.lucene.analysis.LowerCaseFilter</tokenFilterClassName> <tokenFilterClassName>lumis.search.lucene.AccentFilter</tokenFilterClassName> </analyzer >
Podem, ainda, ser criadas novas classes para análise e indexação de conteúdo, utilizando a API do próprio Lucene como base.
Por padrão, o indexer utilizado pelo Portal é implementado pela classe lumis.search.lucene.LuceneIndexer e o searcher padrão pela classelumis.search.lucene.LuceneSearcher. Esta configuração pode, também, ser alterada, utilizando um indexer ou searcher customizado que estenda a classe padrão.
Customização da Busca
O framework de busca foi criado genericamente para ser "plugável" e para atender às necessidades de cada solução. Algumas customizações podem ser realizadas diretamente no DOUI, como definição do Indexer que será utilizado.
Em alguns casos pode ser necessário customizar os valores retornados pela busca para determinados serviços.
Nestes casos, pode-se utilizar um ContentSearchFiller com a possibilidade de customizar, por exemplo, título, sub-título e URL final para cada tipo de conteúdo. Outros campos também podem ser incluídos na indexação do conteúdo.
O trecho de código a seguir demarca as áreas que devem ser configuradas para a alteração da classe para indexação de conteúdo via DOUI.
<sources> <source id="xpto" type="table"> <table>tb_xpto</table> <fields> (...) </fields> <search> <indexer sourceSearchContentFillerClassName="lumis.doui.search.DouiTabularSourceSearchContentFiller"/> </search> </source> </sources>
Principais pontos para abordagem prática
-
Montagem de canal contendo serviços nativos e montagem de serviço de busca em canal superior ou em outro nível do recém criado;
-
Customização do XSL de resultados da busca;
Criação e utilização de nova classe para tokenização, alterando as configurações padrão do searchconfig.xml.
Autor: Sergio Fernandes
Atualizado em 28.10.2011