sql >> Base de Datos >  >> RDS >> Mysql

Cuándo considerar Solr

Esta pregunta requiere una respuesta muy amplia para ser respondida en todos los aspectos. Hay muy bien ciertas especificaciones que pueden hacer que un sistema sea superior a otro para un caso de uso especial, pero quiero cubrir los conceptos básicos aquí.

Me ocuparé por completo de Solr como ejemplo de varios motores de búsqueda que funcionan más o menos de la misma manera.

Quiero comenzar con algunos hechos concretos:

  • No puede confiar en Solr/Lucene como una base de datos segura. Hay una lista de los motivos, pero en su mayoría consisten en opciones de recuperación faltantes, falta de transacciones ácidas, posibles complicaciones, etc. Si decide usar solr, debe completar su índice desde otra fuente, como una tabla SQL. De hecho, solr es perfecto para almacenar documentos que incluyen datos de varias tablas y relaciones, que de otro modo requerirían la construcción de uniones complejas.

  • Solr/Lucene proporciona alucinantes funciones de análisis de texto / derivación / puntuación de búsqueda de texto completo / borrosidad. Cosas que simplemente no puedes hacer con MySQL. De hecho, la búsqueda de texto completo en MySql está limitada a MyIsam y la puntuación es muy trivial y limitada. Ponderar campos, impulsar documentos en ciertas métricas, calificar resultados basados ​​en la proximidad de frases, hacer coincidir la precisión, etc. es un trabajo muy duro o casi imposible.

  • En Solr/Lucene tienes documentos. Realmente no se pueden almacenar relaciones y procesos. Bueno, por supuesto, puede indexar las claves de otros documentos dentro de un campo multivaluado de algún documento, de esta manera puede almacenar relaciones 1:n y hacerlo de ambas maneras para obtener n:n, pero su sobrecarga de datos. No me malinterpreten, es perfectamente bueno y eficiente para muchos propósitos (por ejemplo, para un catálogo de productos donde desea almacenar los distribuidores de productos y desea buscar solo las piezas que están disponibles en ciertos distribuidores o algo así). Pero llegas al final de las posibilidades con HAS / HAS NOT. Casi no puede hacer algo como "obtener todos los productos que están disponibles en al menos 3 distribuidores".

  • Solr/Lucene tiene muy buenas funciones de creación de facetas y análisis posteriores a la búsqueda. Por ejemplo:después de una búsqueda muy amplia que tuvo 40000 aciertos, puede mostrar que solo obtendría 3 aciertos si refinara su búsqueda a la combinación de tener este campo este valor y ese campo ese valor. Las cosas que necesitan consultas adicionales en MySQL se realizan de manera eficiente y conveniente.

Resumamos

  • El poder de Lucene es la búsqueda/análisis de texto. También es alucinantemente rápido debido a la estructura de índice inverso. Realmente puede hacer mucho procesamiento posterior y satisfacer otras necesidades. Aunque está orientado a documentos y no tiene "consultas de gráficos" como lo hacen las tiendas triples con SPARQL, las relaciones N:M básicas son posibles de almacenar y consultar. Si su aplicación se centra en la búsqueda de texto, definitivamente debería optar por Solr/Lucene si no tiene buenas razones, como consultas de filtro de rango multidimensional muy complejas, para hacer lo contrario.

  • Si no tiene una búsqueda de texto, sino algo donde puede apuntar y hacer clic en algo pero no ingresar texto, las buenas bases de datos relacionales antiguas probablemente sean una mejor manera de hacerlo.