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

Como fazer uma pesquisa de texto completo mysql de várias colunas onde palavras parciais são correspondidas


No modo booleano, exigir que as strings estejam presentes (em vez de apenas pontuar mais alto) é feito com + . a correspondência de prefixo é feita com uma terminação * . Isso parece ser o que você quer, então procure por:
+John* +S*
+John* +Smith*
+Smith* +J*
+Jo* +S*

Observe que os índices de texto completo não podem ajudá-lo a pesquisar 'em qualquer lugar em uma palavra'. algo como *mith* está fadado a falhar:eles devem corresponder ao caractere 1 em um índice.

Se você também deseja ordená-los por valores de correspondência e, por exemplo, precisa de John Smith antes Johnny Smithson , você faria isso:
 SELECT * FROM user 
 WHERE MATCH(..fields..) AGAINST ('match' IN BOOLEAN MODE)
 ORDER BY MATCH(..fields..) AGAINST ('match' IN BOOLEAN MODE) DESC;

O que você verá não o levará a lugar nenhum, a menos que você adicione todas as palavras>=ft_min_word_len novamente separadamente:
+John* +S* John
+John* +Smith* John Smith
+Smith* +J* Smith
+Jo* +S*

Para o último, ambos são ft_min_world_len diferente é desejado.