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

Mistério de pesquisa de texto completo do MySQL

De documentos MySQL


  • + Um sinal de mais à esquerda indica que essa palavra deve estar presente em cada linha retornada.

  • * O asterisco serve como operador de truncamento (ou curinga). Ao contrário dos outros operadores, ele deve ser anexado à palavra a ser afetada. As palavras correspondem se começarem com a palavra que precede o operador *.

    Se uma palavra for especificada com o operador de truncamento, ela não será removida de uma consulta booleana, mesmo que seja muito curta (conforme determinado na configuração ft_min_word_len) ou uma palavra de interrupção. Isso ocorre porque a palavra não é vista como muito curta ou como topword, mas como um prefixo que deve estar presente no documento na forma de uma palavra que começa com o prefixo .

No contexto:


CORRESP(...) CONTRA(...)

MATCH (name) AGAINST ('+ski*' IN BOOLEAN MODE) significa que você está procurando por linhas em que uma palavra no name coluna deve conter ski , e deve começar com a palavra ski .

Do conjunto que você postou, Dartmouth Skiway é o único name que está em conformidade com estes requisitos:contém a palavra ski , e é prefixado pela palavra ski .

O outro name colunas, embora correspondam à primeira regra:deve conter ski , eles não são prefixados com ski , conforme estipulado em sua regra. A linha retornada por sua pesquisa booleana é a única com um name coluna que contém uma palavra que contém ski e é uma palavra prefixada por ski .

Como sugerido por ajreal, tente diminuir o ft_min_len_word_setting em my.cnf . Sua pesquisa pode não apresentar os resultados esperados devido à configuração padrão. Tente reduzir para 3.

ONDE coluna LIKE %text%

WHERE name LIKE "%ski%" procura por linhas com name colunas que contêm ski , não importa onde a palavra ocorra.