Atualmente, temos uma solução para isso em produção, mas é muito ruim. Eu gostaria de uma nova perspectiva sobre isso, por favor.
Temos uma tabela PERSON com um ID, LAST_NAME, FIRST_NAME, MIDDLE_NAME e SUFFIX_NAME. Todas essas colunas (exceto ID, é claro) são anuláveis.
Qual é a melhor maneira de indexar esta tabela e qual é a melhor maneira de consultar o nome completo com curingas?
Isso é usado em um aplicativo da web e precisamos permitir que o usuário pesquise algo como
Smit*, Bob
e retorna "Bob Smith", "Bobby Smithson", etc.
Não permitiremos que o usuário classifique os resultados.
Você tem duas opções que eu posso pensar:
Índice para um conjunto específico de pesquisas de usuários
ou
Para a opção 1, você precisa converter sua string de pesquisa "Smit*, Bob" em algo que você está indexando, por exemplo:
where upper(last_name) like 'SMIT%' and upper(first_name) like 'BOB%'
com índices baseados em funçõesupper(last_name)
e talvezupper(first_name)
Usamos o Lucene.Net para procurar contatos em nosso banco de dados Oracle. É um pouco de investimento em codificação para configurar o indexador, o índice e os campos pesquisados, mas uma vez feito isso, você aproveita as muitas opções de pesquisa.
Os usuários relatam os problemas usuais: inserir um termo de pesquisa muito amplo e obter muitos resultados, mas é muito bom para nomes em que o nome inserido é, por exemplo: "Robertson", mas sua pesquisa é "Bert"