MySQL Fulltext limite de 3 letras

1

Nós temos um site que está usando a pesquisa de texto completo do MySQL, mas tem um problema que um número de strings que precisam ser indexados tem 3 caracteres. Eu sei que o padrão para o MySQL não é indexar strings desse tamanho, mas também sei que é possível sobrescrever isso em my.cnf. Eu suponho que a razão para o limite é basicamente baseado em performance, então eu não tenho certeza se isso é algo que devemos considerar mudar? Quais opções nós temos aqui? Há vários sites nesse servidor, portanto, qualquer degradação de desempenho pode causar problemas em vários sites.

versão do mysql: 5

    
por robjmills 21.09.2009 / 13:07

2 respostas

3

A razão é baseada no desempenho, sim. Diminuir o limite padrão aumentará o espaço necessário para armazenar os índices, e o aumento do tamanho do índice levará mais tempo para pesquisar. O impacto dependerá do uso (o tipo de consultas realizadas) e do tamanho do conjunto de dados atual. O mínimo padrão é 4, você pode diminuir assim:

[mysqld]
ft_min_word_len=3

Quando você reconstruir seus índices (como deve), certifique-se de não reparar, mas descarte e reconstrua os índices. Isso é consideravelmente mais rápido do que repará-los.

mysql> ALTER TABLE tbl_name DROP INDEX ft_index;
Query OK, 9999 rows affected (0.00 sec)
Records: 9999  Duplicates: 0  Warnings: 0

mysql> ALTER TABLE tbl_name CREATE INDEX ft_index( searchable_text );
Query OK, 9999 rows affected (0.00 sec)
Records: 9999  Duplicates: 0  Warnings: 0

Provavelmente, sua melhor solução é monitorar o tamanho dos índices em um servidor dev antes e depois da alteração do comprimento do índice.

A melhor opção (que adiei) é ignorar a correspondência de texto completo do MySQL (que tem sérias limitações, incluindo somente o MyISAM, incapacidade de combinar curingas prefixados, uma lista proibitiva de palavras de parada padrão) e implementar uma solução de terceiros. As melhores opções disponíveis são:

Eu pessoalmente optaria pelo Lucene, embora ele exija uma instância de java local. Se isso não for possível, o Sphinx é muito fácil de configurar para o PHP ( passo a passo aqui ) e muitas outras línguas.

Aqui estão alguns bons valores de referência e < href="http://pagetracer.com/2008/02/15/sphinx-and-lucene-search-engines-first-impressions/"> as primeiras impressões de mais alguém sobre o assunto.

    
por 21.09.2009 / 16:29
0

Como alternativa à resposta de Andy, em vez de alterar a configuração global, você pode adicionar um caractere fictício ao final de uma palavra curta para aumentar artificialmente seu tamanho.

Por exemplo, para a palavra "at" você pode substituí-lo por "at--" (que tem comprimento 4) e pela palavra "see" você pode substituí-lo por "see-" (que também tem comprimento 4 ).

Você pode derivar uma coluna como essa e indexar, mas retornar os dados originais.

    
por 08.09.2011 / 15:25