Sistema de busca/filtragem

Embora o sistema de busca6 possa ser usado em diversas aplicações, ele foi desenvolvido para ser utilizado primeiramente pelo MetaNaeg, razão pela qual será descrito como parte integrante do mesmo
. O sistema de busca é responsável por criar uma cláusula ``WHERE'' a partir de um texto de busca, uma tabela e um conjunto de campos de busca.
Ele possui dois tipos de usuários:

Desenvolvedor de site
Pessoa que cria as listagens de um sistema.
Ele deve criar uma listagem, configurar no sitema de busca quais campos da listagem são buscáveis e, prover um meio de enviar ao sistema de busca o texto de busca.
Usuário do site
Quem executa as filtragens passando ao sistema de busca o texto de busca.
Vamos tomar o seguinte exemplo de uso: o desenvolvedor de um site cria uma listagem onde ele deseja que o usuário possa aplicar filtros.
Suponha que a listagem esteja baseada na tabela de Solicitações e, que ele tenha cadastrado os seguintes campos como buscáveis: id, nome, responsável, idade, data cadastro, data entrega.
Quando o usuário do site aplicar o filtro, o sistema de busca precisará receber os seguintes dados:
nome da tabela
Tabela onde a busca será realizada.
separador
String que separa os elementos do texto de busca.
caracter de união
O sistema não separa elementos que estejam delimitados por este caracter. O padrão é usar aspas como caracter de união.
texto da busca
O texto passado pelo usuário, o qual será utilizado na construção da cláusula ``WHERE''.
No momento em que um usuário do site criado realizar uma busca, a string de busca é passada ao sistema juntamente com o nome da tabela.
A partir daí, ela é analisada, dividida em elementos menores e a cláusula ``WHERE'' construída. Uma vez retornada a cláusula ``WHERE'', a listagem precisa ser recarregada utilizando-a como filtro.
Doravante chamaremos de tabela de busca a tabela cadastrada pelo desenvolvedor do site que é passada para a função
``montaQuery7'' e, de campo de busca a cada um dos campos selecionados desta tabela que devem entrar na busca.
O funcionamento da principal função do sistema de busca, a ``montaQuery'', pode ser assim resumido:
Divisão
O texto de busca é dividida em outras menores utilizando o caractere separador passado e, respeitando um caractere
de união que define que todo o conteúdo dentro deste limitador não deve ser separado.
Classificação
Cada elemento é analisado quanto ao tipo. Os tipos são: texto, inteiro, real, bit e data.
Relacionamento
Cada tipo primitivo do Sybase está mapeado para um dos cinco tipos acima. Desta maneira, nesta etapa, para cada elemento do texto de busca, escolhe-se todos os campos de busca com o mesmo tipo e gera-se um cláusula ``WHERE'' relacionando ambos.
Considere que o texto de busca seja Fabio 12 ``Fabio Pisaruk''.

Campos buscáveis da tabela
campo tipo
id inteiro
nome texto
responsável texto
idade inteiro
data cadastro data
data conclusão data
Classificação da string de busca
elemento tipo campos relacionados
Fabio texto nome, responsável
12 inteiro id
Fabio Pisaruk texto nome, responsável

Sendo assim, a cláusula ``WHERE'' gerada pelo sistema de busca seria:
(UCASE(nome) LIKE %FABIO%" OR UCASE(responsável) LIKE %FABIO%") AND
(id = 12) AND
(UCASE(nome) LIKE %FABIO PISARUK%" OR UCASE(responsável) LIKE %FABIO PISARUK%")

É possível realizar buscas exatas ou aproximadas. Caso se opte por procuras exatas então o LIKE é substituído por = e há distinção entre maiúsculas e minúsculas.
O sistema de busca foi utilizado em praticamente todas as listagens8 do MetaNaeg.


... busca6
Busca e filtro estão sendo usados como sinônimos neste texto.
... ``montaQuery7
Função principal do sistema de busca.
... listagens8
Veja as listagens 6.1.1 do sistema para entender melhor o sistema de busca.
Fabio Pisaruk 2004-12-07