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

Como você faz com que sua pesquisa booleana Fulltext escolha o termo C++?


Você terá que mudar a ideia do MySQL sobre o que é uma palavra.

Em primeiro lugar, o comprimento mínimo padrão da palavra é 4. Isso significa que nenhum termo de pesquisa contendo apenas palavras de <4 letras corresponderá, seja 'C++' ou 'cpp'. Você pode configurar isso usando o ft_min_word_len opção de configuração, por exemplo. no seu my.cfg:
[mysqld]
ft_min_word_len=3

(Em seguida, pare/inicie o MySQLd e reconstrua os índices de texto completo.)

Em segundo lugar, '+' não é considerado uma carta pelo MySQL. Você pode torná-lo uma letra, mas isso significa que você não poderá pesquisar a palavra 'peixe' na string 'peixe+chips', então alguns cuidados são necessários. E não é trivial:requer recompilar o MySQL ou hackear um conjunto de caracteres existente. Consulte a seção que começa “Se você deseja alterar o conjunto de caracteres que são considerados caracteres de palavra...” em seção 11.8.6 do doc.

Sim, algo assim é uma solução comum:você pode manter seus dados 'reais' (sem o escape) em uma tabela primária e definitiva — geralmente usando InnoDB para conformidade com ACID. Em seguida, uma tabela MyISAM auxiliar pode ser adicionada, contendo apenas as palavras desconfiguradas para isca de pesquisa de texto completo. Você também pode fazer uma forma limitada de stemming usando essa abordagem.

Outra possibilidade é detectar pesquisas que o MySQL não pode fazer, como aquelas com apenas palavras curtas ou caracteres incomuns, e retornar a uma pesquisa LIKE ou REGEXP simples, mas lenta, apenas para essas pesquisas. Nesse caso, você provavelmente também desejará remover a lista de palavras irrelevantes configurando ft_stopword_file para uma string vazia, já que não é prático pegar tudo nela como especial também.