Estou projetando um aplicativo de desktop (material de contabilidade chato) e tenho um recurso de "produto de pesquisa".
Quero ter uma caixa de pesquisa "inteligente" agradável, mas simples. Atualmente, a caixa de pesquisa funciona dividindo todas as palavras especificadas e procurando todos os registros que correspondem parcialmente a qualquer deles.
Agora, estou enfrentando o seguinte dilema: Eu realmente quero fornecer uma maneira de especificar se o usuário deseja corresponder qualquer ou todos as palavras especificadas. Qual seria uma boa abordagem?
Outra questão é que talvez um usuário deseja executar uma correspondência exata. Mais uma vez, quero que o aplicativo seja simples de usar.
No momento, joguei três botões de rádio no formulário, mas me sinto suja por dentro ... alguma opinião?
O Google resolveu isso há muito tempo - não adianta reinventar a roda. ;)
Sugiro que você remova a necessidade de escolher e faça três pesquisas ao mesmo tempo: "frase exata" , "corresponde a todas as palavras" , AND "corresponde a qualquer" . Em seguida, una (SQL "union") esses resultados nessa ordem e apresente-os ao usuário.
Desvantagens:
Positivos:
Certifique-se de remover as palavras de ruído da frase de pesquisa e normalizar casos/conjugações, etc .; ajudará a encontrar os resultados que seus usuários precisam, mesmo se digitarem as palavras de pesquisa no caso/tempo errado/no artigo errado.
Verifique também se a pesquisa funciona apenas com o teclado (ou seja, sem forçar o usuário a usar o mouse. <search phrase> <Enter>
deve ser suficiente para obter resultados).
Minha opinião pessoal é que você deve fornecer uma maneira de o usuário refinar a pesquisa, porque:
A maneira que eu sugeriria fazer isso é um pouco semelhante ao que Chris sugeriu.
Retirado de DeepDyve :
Depois de pressionar o botão "refinar", você pode abrir uma lista suspensa imediatamente ou até usar uma pequena caixa de diálogo se, no futuro, pretender adicionar mais opções de pesquisa.
Se o espaço é a principal preocupação, você já pensou em usar um menu suspenso? Embora talvez não seja uma solução brilhante (pois exige mais cliques), ocuparia menos espaço do que um conjunto de botões de opção.
A opção atual seria exibida com o expansor para permitir as outras opções.
+-----------------+---+ +---------------------+ +----+
Search | exact phrase | V | | | | Go |
+-----------------+---+ +---------------------+ +----+
| all words |
| any words |
| exact phrase |
+---------------------+
(desculpe a má arte ASCII)
Um refinamento pode ser executar a lista suspensa quando o mouse passa o mouse sobre o expansor, em vez de o usuário ter que clicar, mas, novamente, não é a solução ideal.
Eu mataria as opções de pesquisa - acho que não é assim que seus usuários pensam, mas, conforme o mantra da interface do usuário, teste com usuários reais e veja o que eles pensam.
Geralmente, os mecanismos de pesquisa priorizam assim:
Concordo definitivamente com Erion - não é necessário que o usuário escolha esse tipo de coisa - faça com que seu mecanismo de pesquisa (seja o que for) faça isso por você.
Independentemente da tecnologia usada pelo back-end para a pesquisa, existem maneiras de priorizar os resultados de acordo com os critérios desejados (ou seja, exatamente como o Google). Alguns podem ser mais difíceis de configurar do que outros para esse tipo de coisa, mas mesmo uma indexação básica de texto completo do SQL Server pode fornecer esse nível de organização dos resultados de pesquisa.
Apenas tome a decisão para obter a melhor experiência do usuário e peça a seus engenheiros (ou desenvolvedores, se necessário) que funcionem. É para isso que eles estão lá. Como também sou engenheiro, posso dizer isso :)
Se você estiver curioso, os mecanismos de pesquisa de texto completo funcionam mais comumente usando a pontuação TD-IDF. Isso significa Frequência de termo inversa à frequência do documento . O ponto principal é que um documento é mais relevante se o termo de pesquisa aparecer com muita frequência; isso é descontado pelo número de documentos em que o Word aparece no geral.