Pergunta

Quais são as limitações ou armadilhas ou antipatterns ou armadilhas?

Parece bastante atraente, aparentemente, você pode criar um motor de busca com quase nenhum trabalho. Mas isso não pode ser sem seus problemas ...

quais são suas experiências?

Foi útil?

Solução

Na minha opinião, o maior inconveniente é que a indexação de texto completo do MySQL é limitado a tabelas MyISAM. Como oppsosed para tabelas InnoDB, aqueles não têm uma série de características importantes, por exemplo, transações.

Outras dicas

não pode ser sem seus problemas ...

Não é certamente!

Qualquer termo de busca composta exclusivamente de palavras bloqueadas falhará silenciosamente. As palavras podem ser bloqueadas devido ao mínimo de restrições / max comprimento e / ou o arquivo de palavras de parada.

Eu encontrei o arquivo stopword padrão muito agressivo, que estava impedindo muitas pesquisas válidas. Além disso, o comprimento mínimo padrão de 4 estava chutando em muito frequentemente para siglas pessoas pode querer procurar. I reduziu o ft_min_word_len a 3 e removido o stoplist completamente (ft_stopword_file = ''). Doc: http://dev.mysql.com/doc /refman/5.1/en/fulltext-fine-tuning.html

Você também pode examinar a consulta de pesquisa para ver se ele contém apenas <4 palavras da letra, e cair de volta para uma pesquisa como nesse caso. Não há nenhuma maneira fácil de obter em torno da lista de palavras irrelevantes em um nível de aplicação.

A seleção de personagens palavra 'não podem atender às suas necessidades, e é complicado para a mudança. Por exemplo a pesquisa de “Terry” não irá corresponder “Terry”. Em geral, não há suporte para qualquer tipo de conter, por isso “biscuit” não irá corresponder “biscoitos” qualquer um.

Finalmente, como cg mencionado, não há suporte para InnoDB. Neste dia e idade, você não quer estar colocando todos os seus dados em uma tabela MyISAM.

Se você tem o armazenamento de sobra, o que você pode fazer é colocar a principal versão, canônica dos dados em uma tabela InnoDB, e, em seguida, criar uma tabela MyISAM separada que contém uma cópia do conteúdo freetext, exclusivamente para uso como searchbait. Você tem que atualizar ambas as tabelas em uma mudança, mas se a tabela de MyISAM perde a integridade, em seguida, pelo menos, você só perde a capacidade de pesquisar sobre as linhas em questão, em vez de bumming-se os dados reais ao vivo e recebendo erros de aplicação.

Você pode, então, se você tem os ciclos de sobra, implementar seu próprio processamento de texto nas palavras searchbait e de consulta para contornar algumas das limitações acima. Por exemplo, você pode escapar caracteres que deseja ser a palavra-personagens, personagens removê-lo não quer ser palavra-caracteres e executar simples manual de Inglês decorrentes.

Para grandes tabelas, você precisará aumentar o tamanho do buffer e limite de cache em seu arquivo MySQL configuração.

Além disso, o MATCH () colunas que você usar na necessidade de busca para ser o mesmo que as colunas no índice.

Além de resposta muito boa do bobince, há um artigo na documentação MySQL que fala sobre restrições de texto completo. Espero que isto ajude. http://dev.mysql.com/doc/refman/5.0 /en/fulltext-restrictions.html (Olafur Waage falou sobre um deles já)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top