Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Limitações de indexação de texto completo do MySQL?


Certamente não é!

Qualquer termo de pesquisa composto exclusivamente de palavras bloqueadas falhará silenciosamente. As palavras podem ser bloqueadas devido a restrições de comprimento mínimo/máximo e/ou ao arquivo de palavras irrelevantes.

Achei o arquivo de palavras irrelevantes padrão muito agressivo, estava impedindo muitas pesquisas válidas. Além disso, o comprimento mínimo padrão de 4 estava aparecendo com muita frequência para siglas que as pessoas podem querer pesquisar. Reduzi o ft_min_word_len para 3 e removi completamente a lista de palavras irrelevantes (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 ela contém apenas palavras de <4 letras e retornar a uma pesquisa LIKE nesse caso. Não existe uma maneira tão fácil de contornar a lista de palavras irrelevantes no nível do aplicativo.

A seleção de 'caracteres de palavras' pode não atender às suas necessidades e é difícil alterá-la. Por exemplo, pesquisar por "Terry" não corresponderá a "Terry's". Em geral não há suporte para nenhum tipo de stemming, então “biscuit” também não corresponderá a “biscuits”.

Finalmente, como cg mencionou, não há suporte para InnoDB. Hoje em dia, você não quer colocar todos os seus dados em uma tabela MyISAM.

Se você tiver armazenamento de sobra, o que você pode fazer é colocar a versão canônica principal dos dados em uma tabela InnoDB e, em seguida, criar uma tabela MyISAM separada que contém uma cópia do conteúdo de texto livre, puramente para uso como isca de pesquisa. Você precisa atualizar ambas as tabelas em uma alteração, mas se a tabela MyISAM perder a integridade, pelo menos você perderá a capacidade de pesquisar as linhas em questão, em vez de sobrecarregar os dados reais ao vivo e obter erros de aplicativo.

Você pode então, se tiver os ciclos de sobra, implementar seu próprio processamento de texto na isca de pesquisa e nas palavras de consulta para contornar algumas das limitações acima. Por exemplo, você pode escapar de caracteres que deseja que sejam caracteres de palavras, remover caracteres que não deseja que sejam caracteres de palavras e executar uma derivação manual simples em inglês.