comodín de búsqueda en la columna (s) en una mesa grande (> 10.000.000 filas) en MySQL

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

  •  21-08-2019
  •  | 
  •  

Pregunta

¿Qué techniqes usaría para poner en práctica una búsqueda de contenidos en una columna en una gran tabla en MySQL? Digamos por ejemplo que usted tiene 10.000.000 correos electrónicos almacenados en una tabla en la base de datos y le gustaría implementar una búsqueda por temas, eso me permitirá buscar una o más palabras que estaba presente en el asunto del correo electrónico. Si el usuario busca "santa de la Navidad" que debe encontrar un correo electrónico con temas como "Papá nos visita en esta Navidad" y "Navidad, siempre se mostrará de santa".

Mi idea es procesar todas las palabras que los sujetos (despojar a todos los números, signos especiales, comas, etc.) y guardar cada palabra en una tabla de índices, donde tengo un índice único en la columna de la palabra. Entonces me uniría a que la tabla de correo electrónico por una mesa de muchos a muchos relación.

¿Hay una mejor manera de realizar búsquedas en comodín muy grandes mesas?

¿Hay bases de datos que soporta de forma nativa este tipo de búsquedas?

¿Fue útil?

Solución

Se puede usar índices FULLTEXT si está usando MyISAM como el motor de almacenamiento. Sin embargo, MySQL, en general, no es muy bueno con búsqueda de texto.

Una opción mucho mejor sería ir con una solución de indexación de texto dedicado como Lucene o Sphinx . Personalmente te recomiendo Sphinx - tiene una gran integración con PHP y MySQL y es muy, muy rápido. (Se puede utilizar para acelerar incluso consultas ordinarias - agrupación realiza muy rápido y el pedido)

Wikipedia tiene una buena lista de diferentes motores de indexación -. aquí

Otros consejos

tablas MyISAM de MySQL soportan una FULLTEXT índice, lo que ayuda en este tipo de búsqueda.

Pero no es la tecnología más rápida disponible para este tipo de búsqueda. Y no se puede utilizar en los datos almacenados en las tablas InnoDB.

He oído algunas cosas buenas sobre Sphinx Buscar , pero no he usado todavía.

Aquí hay otro blog sobre Sphinx: http://capttofu.livejournal.com/13037.html

Mientras que un índice de texto completo de MySQL es posible, sospecho que me gustaría ver el uso de algo diseñado para ser un motor de búsqueda como Lucene .

Esto suena como una búsqueda de texto completo, que soporta SQL Server.

Pero su idea es en general correcto. Estás calcular de manera efectiva un "índice" en su mesa con antelación para acelerar las búsquedas.

¿Quieres mirar el MATCH...AGAINST función.

Véase, por ejemplo: Usar MySQL búsqueda de texto completo

marcar " buscar con texto completo " en docs MySQL (que yo sepa, todos los DBMS actuales soportan esto)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top