Wildcard pesquisar na coluna (s) em uma grande mesa (> 10.000.000 linhas) no MySQL

StackOverflow https://stackoverflow.com/questions/373017

  •  21-08-2019
  •  | 
  •  

Pergunta

Qual techniqes você usaria para implementar uma busca de conteúdo em uma coluna em uma muito grande mesa no MySQL? Digamos, por exemplo, que você tem 10.000.000 e-mails armazenados em uma tabela no banco de dados e gostaria de implementar uma pesquisa por assunto, que me permitiria procurar uma ou mais palavras que estava presente no assunto do email. Se o usuário procurou "christmas santa" Você deve encontrar uma e-mails com assuntos como "Santa visitas nós neste Natal" e "natal, vai papai sempre mostrar".

A minha ideia é processar todas as palavras dos sujeitos (tira todos os números, sinais especiais, vírgulas etc) e salvar cada palavra em uma tabela de índice, onde eu tenho um índice exclusivo na coluna de palavra. Então eu ligaria que a tabela de e-mail por muitos para muitos tabela de relacionamento.

Existe uma maneira melhor para realizar pesquisas curinga em muito grandes mesas?

Existe bancos de dados que nativamente suporta este tipo de pesquisas?

Foi útil?

Solução

Você pode usar índices FULLTEXT se você estiver usando MyISAM como o mecanismo de armazenamento. No entanto, MySQL, em geral, não é muito bom com pesquisa de texto.

Uma opção muito melhor seria ir com uma solução de indexação de texto dedicada, como Lucene ou Esfinge . Pessoalmente eu recomendaria Sphinx - tem grande integração com PHP e MySQL e é muito, muito rápido (pode ser usado para acelerar as consultas, mesmo comuns - executa muito rápido agrupamento e ordenação).

A Wikipedia tem uma boa lista de diferentes mecanismos de indexação -. aqui

Outras dicas

tabelas MyISAM do MySQL apoiar uma href="http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html" rel="nofollow noreferrer"> FULLTEXT índice , o que ajuda neste tipo de pesquisa.

Mas não é a tecnologia mais rápida disponível para este tipo de pesquisa. E você não pode usá-lo em dados armazenados em tabelas InnoDB.

Eu ouvi algumas coisas boas sobre Esfinge Pesquisa , mas eu não usei ainda.

Aqui está um outro blog sobre Esfinge: http://capttofu.livejournal.com/13037.html

Enquanto um índice mysql fulltext é possível, eu suspeito que eu iria olhar para usando algo projetado para ser um motor de busca como Lucene .

Isso soa como uma busca de um texto completo, que suporta SQL Server.

Mas a sua idéia é geralmente de som. Você está computação efetivamente um "índice" na sua mesa com antecedência para acelerar as pesquisas.

Você quer olhar para a função MATCH...AGAINST.

Veja, por exemplo: Usando MySQL texto completo Searching

seleção " texto completo pesquisa " em docs MySQL (AFAIK, todos os DBMS atuais apoiar este)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top