Pesquisa de texto completo do MySQL

Hoje eu joguei para otimizar um lento SQL tipo de solicitação

SELECT * FROM 'table' WHERE `field` LIKE '%word%'

Onde está o problemático um momento aqui – a última parte palavra % ‘ %’ e até mesmo personagens de concretude maiores % antes da palavra, por isso fazemos.... Símbolo do wildcard % ,antes de qualquer valor, nosso aplicativo diretamente traduz diretamente em uma lenta, Porque desta forma o aplicativo para de nos para usar os índices da. Como sempre existem soluções, Mas nem sempre são clara 😆 geralmente MySQL Você tem uma solução para este problema com pesquisa de texto completo Indexação do. Como é a mudança do campo há muito escrito na documentação, Mas pressa vou descrever como mudar a solicitação superior, Porque vamos finalmente começar a um pouco de drama. Formam um bonito como aplicável ao campo de texto completo, a consulta precisa ser alterado no formulário:

SELECT * FROM `table` WHERE MATCH (field) AGAINST ('word')

Então, a estrutura é óbvia e não há nenhuma necessidade de discussão desnecessária. A consulta acima entrará em vigor, Se a palavra, para o qual você estiver fazendo uma solicitação pelo menos 4 o símbolo, Este é o valor padrão, Se você quiser modificá-lo, você deve especificar o valor, която желаете в my.cnf в частта [mysqld] com a declaração variavel= 3 ou 2, 1 не е добър избор очевидно 😉 . Depois que você alterar o valor e reinicie o servidor mysql-necessidade de fazer um reparo de tabelas, em ordem para a indexação de novo entra em vigor. Aqui está tudo limpo: Você muda, A reposição, índices de rebildvam e fazer o meu pedido e retorna 0 Verificação de linha com 😀

SHOW VARIABLES

Vejo que os valores, Pedi que entraram em vigor, índices de rebildvam novo – mesmo resultado. Ódio 🙄, muito desconfortável.. ОТ ТУК НАТАТЪК ЗАПОЧНА ЕДНО ГОЛЯМО И РУГАЕНЕ РОВЕНЕ ЗА КЛЮЧА ЗА БАРАКАТА 😀 СЕ КОЙТО ОКАЗА ДОСТА, ДОСТА ИНТЕРЕСЕН. КАТО ЦЯЛО, КАТО ЗАПОЧНАХ ДА ЧЕТА ДОКУМЕНТАЦИЯТА ЗА НЕ ЗНАМ КОЙ ПЪТ И СТИГНАХ ДО ЕДИН ИНТЕРЕСЕН ПАСАЖ

Such a technique works best with large collections (Na verdade, Ele foi cuidadosamente afinado desta maneira). Para tabelas muito pequenas, distribuição de palavra não reflete adequadamente seu valor semântico, e este modelo pode às vezes produzir resultados bizarros. Por exemplo, Embora a palavra "MySQL" está presente em cada linha da tabela de artigos mostrada anteriormente, uma busca pela palavra não produz nenhum resultado

ГРЕДА 😳 Дам табличката ми беше малка – Ainda era um teste. Em uma aplicativo grande Naših mesa com 2 000 000 ordem e as coisas lá estão dormindo. Bem já está claro o problema. Para deixar bem claro a solução, Eu vou mencionar brevemente, Esse apoio de pesquisa de texto completo 3 Modos avançados BOOLEAN , EXPRESSÕES E LINGUAGEM NATURAL como as últimas obras por padrão. Sobre os modos diferentes que você pode verificar a documentação, Vou explicar com 2-3 palavras para BOOLEAN, porque é a chave. Suporta operadores lógicos do tipo e, OU , Não, e assim por diante e pode fazer um pouco de magia com as frases de busca, para ter um, Existe outra, etc.. Suportes e símbolo *, Isso é o equivalente de caracteres curinga % 😉 é útil, Quando o termo de pesquisa é o comprimento da variavel ou bandejas pequenas ;). Pelo menos para mim na mesa com sobre 100 a linha está fazendo um trabalho perfeito. A única coisa que resta para ver e o aplicativo concluído:

SELECT * FROM `table` WHERE MATCH (field)
AGAINST ('*word*' IN BOOLEAN MODE)

Agora vem um tempo de indexação de obras com nos caracteres curinga – a resposta é que não sei. Принципно мисля, че да, защото не е казано друго в документацията, но в документацията очевидно не се казват или показват много неща 😀

Reforçada por Zemanta

2 comments

    1. Е при големи таблици вече има други решения 😉 partitions да речем или други механизмни за fulltext search като Sphinx

Deixe uma resposta

Seu endereço de email não será publicado. Campos obrigatórios são marcados *

anti SPAM *