Comparación del motor de búsqueda de texto completo: Lucene, Sphinx, Postgresql, MySQL?

312

Estoy construyendo un sitio Django y estoy buscando un motor de búsqueda.

Algunos candidatos:

  • Lucene / Lucene con brújula / Solr

  • Esfinge

  • Postgresql búsqueda de texto completo incorporada

  • Búsqueda de texto completo incorporada en MySQl

Criteria de selección:

  • relevancia de resultados y clasificación
  • velocidad de búsqueda e indexación
  • facilidad de uso y facilidad de integración con Django
  • requisitos de recursos: el sitio estará alojado en un VPS , por lo que idealmente el motor de búsqueda no requeriría mucha RAM y CPU
  • escalabilidad
  • características adicionales como "¿quiso decir?", búsquedas relacionadas, etc.

Cualquier persona que haya tenido experiencia con los motores de búsqueda anteriores u otros motores que no están en la lista, me encantaría conocer sus opiniones.

EDITAR: En cuanto a las necesidades de indexación, ya que los usuarios siguen ingresando datos en el sitio, esos datos tendrían que indexarse ​​continuamente. No tiene que ser en tiempo real, pero idealmente los datos nuevos aparecerían en el índice con no más de 15-30 minutos de retraso

Continuación
fuente
26
2 ¢: la búsqueda de texto completo de MySQL y las transacciones son (actualmente) mutuamente excluyentes. Los índices de texto completo de MySQL requieren el tipo de tabla MyISAM, que no admite transacciones. (A diferencia del tipo de tabla InnoDB que admite transacciones, pero no índices de texto completo.)
Carl G
2
La búsqueda de texto completo de PostgreSQL Tsearch no admite la búsqueda de frases. Sin embargo, está en la lista TODO sai.msu.su/~megera/wiki/FTS_Todo .
Gnanam
1
Cualquiera que esté mirando esto para Django debería revisar la aplicación de pajar. haystacksearch.org
Keyo
24
@CarlG, solo para referencia de todos. MySQL 5.6+ tiene soporte de búsqueda de texto completo con motor innodb
DhruvPathak

Respuestas:

167

Es bueno ver que alguien intervino sobre Lucene, porque no tengo idea de eso.

Sphinx, por otro lado, lo sé bastante bien, así que veamos si puedo ser de alguna ayuda.

  • La clasificación de relevancia de resultados es la predeterminada. Puede configurar su propia clasificación si lo desea, y dar a los campos específicos mayores ponderaciones.
  • La velocidad de indexación es súper rápida, ya que habla directamente con la base de datos. Cualquier lentitud vendrá de consultas SQL complejas y claves foráneas no indexadas y otros problemas similares. Nunca he notado ninguna lentitud en la búsqueda tampoco.
  • Soy un tipo de Rails, así que no tengo idea de lo fácil que es implementarlo con Django. Sin embargo, hay una API de Python que viene con la fuente Sphinx.
  • El servicio de búsqueda daemon (buscado) es bastante bajo en el uso de memoria, y también puede establecer límites en la cantidad de memoria que usa el proceso del indexador.
  • La escalabilidad es donde mi conocimiento es más incompleto, pero es bastante fácil copiar archivos de índice en varias máquinas y ejecutar varios demonios buscados. Sin embargo, la impresión general que obtengo de los demás es que es bastante bueno bajo una carga alta, por lo que escalarlo en varias máquinas no es algo que deba tratarse.
  • No hay soporte para 'did-you-mean', etc., aunque esto se puede hacer con otras herramientas con bastante facilidad. Sphinx hace palabras madre a través de diccionarios, por lo que 'conducir' y 'conducir' (por ejemplo) se considerarían lo mismo en las búsquedas.
  • Sin embargo, Sphinx no permite actualizaciones parciales de índice para datos de campo. El enfoque común para esto es mantener un índice delta con todos los cambios recientes y volver a indexar esto después de cada cambio (y esos nuevos resultados aparecen en un segundo o dos). Debido a la pequeña cantidad de datos, esto puede tomar unos segundos. Sin embargo, aún deberá volver a indexar el conjunto de datos principal con regularidad (aunque ¿con qué frecuencia depende de la volatilidad de sus datos, todos los días, cada hora?). Sin embargo, las rápidas velocidades de indexación mantienen todo esto bastante indoloro.

No tengo idea de cuán aplicable es a su situación, pero Evan Weaver comparó algunas de las opciones comunes de búsqueda de Rails (Sphinx, Ferret (un puerto de Lucene para Ruby) y Solr), ejecutando algunos puntos de referencia. Podría ser útil, supongo.

No he sondeado las profundidades de la búsqueda de texto completo de MySQL, pero sé que no compite en cuanto a velocidad ni en función de las características con Sphinx, Lucene o Solr.

palmadita
fuente
Sphinx le permite actualizar atributos individuales de elementos en los índices actuales, pero no eliminar / actualizar registros completos.
Xorlev
sphinx RT le permite realizar actualizaciones / eliminaciones parciales. está en una etapa temprana pero ya [casi] funciona. sphinxsearch.com/wiki/doku.php?id=rt_tutorial
pQd
44
Aquí hay una respuesta en Solr que es un buen par para esta respuesta en Sphinx
New Alexandria
Nada puede igualar a Sphinx para la velocidad, por lo que si la velocidad es su principal preocupación, entonces Sphinx es la opción a seguir. Buen post
twigg
Sphinx 2.3.2 Beta ahora tiene una función llamada 'SUGERENCIA DE LLAMADAS' que se puede usar para implementar '¿quieres decir?' sphinxsearch.com/docs/devel.html#sphinxql-call-suggest
Vinod K
82

No conozco a Sphinx, pero en cuanto a Lucene frente a una búsqueda de texto completo en la base de datos, creo que el rendimiento de Lucene no tiene comparación. Debería poder realizar casi cualquier búsqueda en menos de 10 ms, sin importar cuántos registros tenga que buscar, siempre que haya configurado correctamente su índice de Lucene.

Sin embargo, aquí viene el mayor obstáculo: personalmente, creo que integrar Lucene en su proyecto no es fácil . Claro, no es demasiado difícil configurarlo para que pueda hacer una búsqueda básica, pero si desea aprovecharlo al máximo, con un rendimiento óptimo, definitivamente necesita un buen libro sobre Lucene.

En cuanto a los requisitos de CPU y RAM, realizar una búsqueda en Lucene no le da demasiada tarea a su CPU, aunque indexar sus datos lo es, aunque no lo hace con demasiada frecuencia (tal vez una o dos veces al día), por lo que no es gran obstáculo.

No responde a todas sus preguntas, pero en resumen, si tiene muchos datos para buscar y desea un excelente rendimiento, entonces creo que Lucene es definitivamente el camino a seguir. Si no va a tener tantos datos para buscar, entonces también podría optar por una búsqueda de texto completo en la base de datos. Definir una búsqueda de texto completo en MySQL es definitivamente más fácil en mi libro.

Razzie
fuente
10
Compare con la esfinge, lucence es demasiado lenta y voluminosa. Había usado ambos en mi proyecto y finalmente me quedé con la esfinge. Lucence está en Java, y requiere mucha más CPU y RAM que Sphinx.
Phyo Arkar Lwin
25
Tengo que estar en desacuerdo aquí. Lucene es increíblemente rápido SI construyes un índice correcto. Básicamente, puede hacer una consulta avanzada sobre millones de registros en solo un par de milisegundos. Solo necesitas saber lo que estás haciendo. Y Lucene está en Java ... ¿tu punto es? También hay un puerto .NET, Lucene.NET por cierto.
Razzie
15
pero usted declaró claramente que no usa sphinx, y v3sson ha usado ambos.
user508546
20
¿Cómo puedes afirmar que el rendimiento de Lucene no tiene parangón en la misma oración que afirmas que no has usado sphinx?
user508546
22
Preguntas válidas Nunca dije que Lucene es más rápido que Sphinx, mencioné que Lucene vs una búsqueda de texto completo en la base de datos no tiene comparación. Y es. No hay duda sobre eso. Lucene se basa en un índice invertido. Ahora no conozco Sphinx, como se mencionó anteriormente, pero si también usa un índice invertido o un método de indexación similar, entonces es posible que tengan el mismo rendimiento. Afirmar que Lucene, en comparación con Sphinx, sería "demasiado lento y voluminoso" no se basa en hechos. Especialmente no cuando solo se dice que Lucene está en 'Java', lo cual es simplemente una cuestión ridícula en términos de rendimiento.
Razzie
60

Me sorprende que no haya más información publicada sobre Solr. Solr es bastante similar a Sphinx pero tiene características más avanzadas (AFAIK ya que no he usado Sphinx, solo lea sobre esto).

La respuesta en el siguiente enlace detalla algunas cosas sobre Sphinx que también se aplica a Solr. Comparación del motor de búsqueda de texto completo: Lucene, Sphinx, Postgresql, MySQL?

Solr también proporciona las siguientes características adicionales:

  1. Apoya la replicación
  2. Múltiples núcleos (piense en estos como bases de datos separadas con su propia configuración e índices propios)
  3. Búsquedas booleanas
  4. Resaltado de palabras clave (bastante fácil de hacer en el código de la aplicación si tiene regex-fu; sin embargo, ¿por qué no dejar que una herramienta especializada haga un mejor trabajo para usted?)
  5. Actualizar índice a través de XML o archivo delimitado
  6. Comuníquese con el servidor de búsqueda a través de HTTP (incluso puede devolver Json, PHP nativo / Ruby / Python)
  7. PDF, indexación de documentos de Word
  8. Campos dinamicos
  9. Facetas
  10. Campos agregados
  11. Detener palabras, sinónimos, etc.
  12. Más así ...
  13. Indice directamente desde la base de datos con consultas personalizadas
  14. Sugerir automáticamente
  15. Armado automático de caché
  16. Indización rápida (en comparación con los tiempos de indexación de búsqueda de texto completo de MySQL): Lucene utiliza un formato de índice invertido binario.
  17. Impulso (reglas personalizadas para aumentar la relevancia de una palabra clave o frase en particular, etc.)
  18. Búsquedas con campos (si un usuario de búsqueda conoce el campo que desea buscar, restringe su búsqueda escribiendo el campo, luego el valor, y SOLO se busca ese campo en lugar de todo, una experiencia de usuario mucho mejor)

Por cierto, hay muchas más funciones; Sin embargo, he enumerado solo las características que realmente he usado en la producción. Por cierto, fuera de la caja, MySQL admite # 1, # 3 y # 11 (limitado) en la lista anterior. Para las características que está buscando, una base de datos relacional no lo va a cortar. Los eliminaría de inmediato.

Además, otro beneficio es que Solr (bueno, Lucene en realidad) es una base de datos de documentos (por ejemplo, NoSQL), por lo que muchos de los beneficios de cualquier otra base de datos de documentos se pueden obtener con Solr. En otras palabras, puede usarlo para algo más que solo buscar (es decir, Rendimiento). Sea creativo con eso :)

Wil Moore III
fuente
Sphinx también acerca de Soporta la replicación Múltiples núcleos Búsquedas booleanas Resaltado de palabras clave Actualizar índice a través de XML -o archivo delimitado- PDF, indexación de documentos de Word (a través de xml) Facetas Detener palabras, sinónimos, etc. Indice directamente desde la base de datos con consultas personalizadas Sugiera automáticamente Rápido indexación Impulso de búsquedas con campos Acerca de los campos dinámicos Campos agregados Caché Autoarmado No lo sé
Moosh
58

Apache Solr


Además de responder las consultas de OP, permítanme presentar algunas ideas sobre Apache Solr, desde una simple introducción hasta una instalación e implementación detalladas .

Introducción simple


Cualquier persona que haya tenido experiencia con los motores de búsqueda anteriores u otros motores que no están en la lista, me encantaría conocer sus opiniones.

Solr no debe usarse para resolver problemas en tiempo real. Para los motores de búsqueda, Solr es prácticamente un juego y funciona perfectamente .

Solr funciona bien en aplicaciones web de alto tráfico ( leí en alguna parte que no es adecuado para esto, pero estoy respaldando esa declaración ). Utiliza la RAM, no la CPU.

  • relevancia de resultados y clasificación

El impulso te ayuda a clasificar tus resultados en la parte superior. Por ejemplo, que está tratando de buscar un nombre de John en el campo Nombre y apellido , y quiere dar relevancia al primer nombre de campo, entonces usted necesita para impulsar el primer nombre de campo como se muestra.

http://localhost:8983/solr/collection1/select?q=firstname:john^2&lastname:john

Como se puede ver, apellido campo se impulsó hacia arriba con una puntuación de 2.

Más información sobre SolrRelevancy

  • velocidad de búsqueda e indexación

La velocidad es increíblemente rápida y no hay compromiso en eso. La razón por la que me mudé a Solr .

Con respecto a la velocidad de indexación, Solr también puede manejar JOINS desde las tablas de su base de datos. Un JOIN más alto y complejo afecta la velocidad de indexación. Sin embargo, una enorme configuración de RAM puede abordar fácilmente esta situación.

Cuanto mayor sea la RAM, mayor será la velocidad de indexación de Solr.

  • facilidad de uso y facilidad de integración con Django

Nunca intenté integrar Solr y Django , sin embargo, puedes lograr hacerlo con Haystack . Encontré un artículo interesante sobre el mismo y aquí está el github para ello.

  • requisitos de recursos: el sitio estará alojado en un VPS, por lo que idealmente el motor de búsqueda no requeriría mucha RAM y CPU

Solr se reproduce en RAM, por lo que si la RAM es alta, no debe preocuparse por Solr .

El uso de RAM de Solr se dispara en la indexación completa si tiene unos mil millones de registros, podría hacer uso inteligente de las importaciones de Delta para hacer frente a esta situación. Como se explicó, Solr es solo una solución casi en tiempo real .

  • escalabilidad

Solr es altamente escalable. Echa un vistazo a SolrCloud . Algunas características clave de la misma.

  • Fragmentos (o fragmentación es el concepto de distribuir el índice entre varias máquinas, por ejemplo, si su índice ha crecido demasiado)
  • Equilibrio de carga (si Solrj se usa con la nube Solr, automáticamente se encarga del equilibrio de carga utilizando su mecanismo Round-Robin)
  • Búsqueda distribuida
  • Alta disponibilidad
  • características adicionales como "¿quiso decir?", búsquedas relacionadas, etc.

Para el escenario anterior, podría usar el SpellCheckComponent que está empaquetado con Solr . Hay muchas otras características, The SnowballPorterFilterFactory ayuda a recuperar registros, por ejemplo, si escribió, libros en lugar de libro , se le mostrarán los resultados relacionados con el libro .


Esta respuesta se centra ampliamente en Apache Solr y MySQL . Django está fuera de alcance.

Suponiendo que se encuentra en el entorno LINUX, puede continuar con este artículo. (la mía era una versión de Ubuntu 14.04)

Instalación detallada

Empezando

Descargue Apache Solr desde aquí . Esa sería la versión 4.8.1 . Podrías descargar nuevas versiones, encontré esto estable.

Después de descargar el archivo, extráigalo a la carpeta que elija. Di ... Downloadso lo que sea ... Así se veráDownloads/solr-4.8.1/

En su solicitud .. Navegue dentro del directorio

shankar@shankar-lenovo: cd Downloads/solr-4.8.1

Entonces ahora estás aquí ...

shankar@shankar-lenovo: ~/Downloads/solr-4.8.1$

Inicie el servidor de aplicaciones Jetty

Jetty está disponible dentro de la carpeta de ejemplos del solr-4.8.1directorio, así que navegue dentro de eso e inicie el servidor de aplicaciones Jetty.

shankar@shankar-lenovo:~/Downloads/solr-4.8.1/example$ java -jar start.jar

Ahora, no cierre el terminal, minimícelo y déjelo a un lado.

(SUGERENCIA: Use & after start.jar para hacer que el servidor Jetty se ejecute en segundo plano)

Para verificar si Apache Solr se ejecuta correctamente, visite esta URL en el navegador. http: // localhost: 8983 / solr

Ejecución de Jetty en puerto personalizado

Se ejecuta en el puerto 8983 por defecto. Puede cambiar el puerto aquí o directamente dentro del jetty.xmlarchivo.

java -Djetty.port=9091 -jar start.jar

Descargar el JConnector

Este archivo JAR actúa como un puente entre MySQL y JDBC. Descargue la versión independiente de la plataforma aquí.

Después de descargarlo, extraiga la carpeta y cópiela mysql-connector-java-5.1.31-bin.jary péguela en el directorio lib .

shankar@shankar-lenovo:~/Downloads/solr-4.8.1/contrib/dataimporthandler/lib

Crear la tabla MySQL para vincular a Apache Solr

Para usar Solr , debe tener algunas tablas y datos para buscar. Para eso, usaremos MySQL para crear una tabla y presionar algunos nombres aleatorios y luego podríamos usar Solr para conectarnos a MySQL e indexar esa tabla y sus entradas.

Estructura 1.Table

CREATE TABLE test_solr_mysql
 (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  name VARCHAR(45) NULL,
  created TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (id)
 );

2.Popula la tabla anterior

INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jean');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jack');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jason');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Vego');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Grunt');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jasper');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Fred');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jenna');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Rebecca');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Roland');

Entrar en el núcleo y agregar las directivas lib

1.Navegar a

shankar@shankar-lenovo: ~/Downloads/solr-4.8.1/example/solr/collection1/conf

2.Modificación del solrconfig.xml

Agregue estas dos directivas a este archivo.

  <lib dir="../../../contrib/dataimporthandler/lib/" regex=".*\.jar" />
  <lib dir="../../../dist/" regex="solr-dataimporthandler-\d.*\.jar" />

Ahora agregue el DIH ( controlador de importación de datos)

<requestHandler name="/dataimport" 
  class="org.apache.solr.handler.dataimport.DataImportHandler" >
    <lst name="defaults">
      <str name="config">db-data-config.xml</str>
    </lst>
</requestHandler>

3.Cree el archivo db-data-config.xml

Si el archivo existe, entonces ignore, agregue estas líneas a ese archivo. Como puede ver en la primera línea, debe proporcionar las credenciales de su base de datos MySQL . El nombre de la base de datos, nombre de usuario y contraseña.

<dataConfig>
    <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/yourdbname" user="dbuser" password="dbpass"/>
    <document>
   <entity name="test_solr" query="select CONCAT('test_solr-',id) as rid,name from test_solr_mysql WHERE '${dataimporter.request.clean}' != 'false'
      OR `created` > '${dataimporter.last_index_time}'" >
    <field name="id" column="rid" />
    <field name="solr_name" column="name" />
    </entity>
   </document>
</dataConfig>

(SUGERENCIA: puede tener cualquier número de entidades, pero tenga cuidado con el campo de identificación; si son iguales, se omitirá la indexación)

4.Modifique el archivo schema.xml

Agregue esto a su schema.xml como se muestra.

<uniqueKey>id</uniqueKey>
<field name="solr_name" type="string" indexed="true" stored="true" />

Implementación

Indexación

Aquí es donde está el verdadero negocio. Debe hacer la indexación de datos de MySQL a Solr para poder utilizar Solr Queries.

Paso 1: ve al panel de administración de Solr

Pulse la URL http: // localhost: 8983 / solr en su navegador. La pantalla se abre así.

Este es el panel de administración principal de Apache Solr

Como lo indica el marcador, vaya al Registro para ver si alguna de las configuraciones anteriores ha provocado errores.

Paso 2: revisa tus registros

Ok, ahora estás aquí. Como puedes, hay muchos mensajes amarillos (ADVERTENCIAS). Asegúrese de no tener mensajes de error marcados en rojo. Anteriormente, en nuestra configuración habíamos agregado una consulta de selección en nuestro db-data-config.xml , digamos que si hubiera algún error en esa consulta, habría aparecido aquí.

Esta es la sección de registro de su motor Apache Solr

Bien, sin errores. Estamos bien para irnos. Elija colección1 de la lista como se muestra y seleccione Importación de datos

Paso 3: DIH (controlador de importación de datos)

Con DIH, se conectará a MySQL desde Solr a través del archivo de configuración db-data-config.xml desde la interfaz de Solr y recuperará los 10 registros de la base de datos que se indexan en Solr .

Para hacerlo, elija la importación completa y marque las opciones Limpiar y confirmar . Ahora haga clic en Ejecutar como se muestra.

Alternativamente, también podría usar una consulta directa de importación completa como esta ...

http://localhost:8983/solr/collection1/dataimport?command=full-import&commit=true

El manejador de importación de datos

Después de hacer clic en Ejecutar , Solr comienza a indexar los registros; si hubiera algún error, indicaría que la indexación ha fallado y debe volver a la sección Registro para ver qué ha fallado.

Suponiendo que no haya errores con esta configuración y si la indexación se completa con éxito, recibirá esta notificación.

Éxito de indexación

Paso 4: Ejecución de consultas Solr

Parece que todo salió bien, ahora puede usar Solr Queries para consultar los datos que se indexaron. Haga clic en la consulta a la izquierda y luego presione el botón Ejecutar en la parte inferior.

Verá los registros indexados como se muestra.

La consulta Solr correspondiente para enumerar todos los registros es

http://localhost:8983/solr/collection1/select?q=*:*&wt=json&indent=true

Los datos indexados

Bueno, ahí van los 10 registros indexados. Digamos, solo necesitamos nombres que comiencen con Ja , en este caso, debe orientar el nombre de la columna solr_name, por lo tanto, su consulta es así.

http://localhost:8983/solr/collection1/select?q=solr_name:Ja*&wt=json&indent=true

Los datos JSON que comienzan con Ja *

Así es como escribes consultas Solr . Para leer más al respecto, consulte este hermoso artículo .

Shankar Damodaran
fuente
3
@Downvoter, siéntase libre de comentar o editar esta respuesta y el razonamiento para el voto negativo también ayudará a otros.
Shankar Damodaran
44
Esta es una de las publicaciones más completas y bien organizadas que he visto en SO. Trabajo asombroso.
degenerado
28

Estoy mirando la búsqueda de texto completo de PostgreSQL en este momento, y tiene todas las características correctas de un motor de búsqueda moderno, muy buen carácter extendido y soporte multilingüe, buena integración estrecha con campos de texto en la base de datos.

Pero no tiene operadores de búsqueda fáciles de usar como + o AND (usa & |!) Y no estoy entusiasmado con cómo funciona en su sitio de documentación. Si bien tiene negrita de términos de coincidencia en los fragmentos de resultados, el algoritmo predeterminado para los términos de coincidencia no es excelente. Además, si desea indexar rtf, PDF, MS Office, debe buscar e integrar un convertidor de formato de archivo.

OTOH, es mucho mejor que la búsqueda de texto MySQL, que ni siquiera indexa palabras de tres letras o menos. Es el valor predeterminado para la búsqueda de MediaWiki, y realmente creo que no es bueno para los usuarios finales: http://www.searchtools.com/analysis/mediawiki-search/

En todos los casos que he visto, Lucene / Solr y Sphinx son realmente geniales . Son un código sólido y han evolucionado con mejoras significativas en la usabilidad, por lo que todas las herramientas están ahí para hacer búsquedas que satisfagan a casi todos.

SHAILI - SOLR incluye la biblioteca de códigos de búsqueda Lucene y tiene los componentes para ser un buen motor de búsqueda independiente.

SearchTools-Avi
fuente
1
Creo que por la búsqueda de texto completo de PostgreSQL te refieres Tsearch. Pero Tsearch no admite la búsqueda de frases. Todavía está en su lista TODO sai.msu.su/~megera/wiki/FTS_Todo .
Gnanam
1
Acabo de hacer un montón de pruebas en la búsqueda de texto completo de Postgres 9.0; se decepcionó al descubrir que el texto en francés no coincide si el usuario olvida acertar todos los acentos. La coincidencia de formas de palabras es irregular, por ejemplo, en inglés "say" no coincide con el texto que contiene "said". Sin embargo, en general es bastante impresionante para una característica integrada en todos los idiomas probados (en, fr, ru).
Roman Starkov
99
@romkyns: necesita instalar un diccionario sin acento para eliminarlos.
Denis de Bernardy
2
"OTOH, es mucho mejor que la búsqueda de texto MySQL, que ni siquiera indexa palabras de tres letras o menos". Esa no es una restricción incorporada de MySQL, es lo que establezca en el archivo de configuración. Si desea indexar palabras de una letra, simplemente cambie un valor en la configuración.
Canuck
1
Es preocupante que las personas estén haciendo comparaciones en bases de datos que aún no han explorado por completo. MySQL PUEDE indexar palabras con tres caracteres o menos, solo tiene que configurarlo correctamente.
TheCarver
22

Solo mis dos centavos a esta vieja pregunta. Recomiendo echar un vistazo a ElasticSearch .

Elasticsearch es un servidor de búsqueda basado en Lucene. Proporciona un motor de búsqueda de texto completo distribuido y con capacidad para múltiples inquilinos con una interfaz web RESTful y documentos JSON sin esquema. Elasticsearch está desarrollado en Java y se lanza como código abierto bajo los términos de la Licencia Apache.

Las ventajas sobre otros motores FTS (búsqueda de texto completo) son:

  • Interfaz RESTful
  • Mejor escalabilidad
  • Comunidad grande
  • Creado por los desarrolladores de Lucene
  • Amplia documentación
  • Hay muchas bibliotecas de código abierto disponibles (incluido Django)

Estamos utilizando este motor de búsqueda en nuestro proyecto y estamos muy contentos con él.

vooD
fuente
10

SearchTools-Avi dijo "Búsqueda de texto MySQL, que ni siquiera indexa palabras de tres letras o menos".

Para su información, la longitud de palabra mínima de texto completo de MySQL es ajustable desde al menos MySQL 5.0. Google 'mysql fulltext min length' para instrucciones simples.

Dicho esto, el texto completo de MySQL tiene limitaciones: por un lado, la actualización se hace lenta una vez que alcanzas un millón de registros más o menos, ...

BJ
fuente
2

Añadiría mnoGoSearch a la lista. Solución extremadamente eficiente y flexible, que funciona como Google: el indexador obtiene datos de múltiples sitios. Puede usar criterios básicos o inventar sus propios ganchos para tener una calidad de búsqueda máxima. También podría obtener los datos directamente de la base de datos.

La solución no es tan conocida hoy, pero satisface las máximas necesidades. Puede compilarlo e instalarlo o en un servidor independiente, o incluso en su servidor principal, no necesita tantos recursos como Solr, ya que está escrito en C y funciona perfectamente incluso en servidores pequeños.

Al principio, debe compilarlo usted mismo, por lo que requiere algo de conocimiento. Hice un pequeño script para Debian, que podría ayudar. Cualquier ajuste es bienvenido.

Como está utilizando el marco Django, podría usar un cliente PHP o en el medio, o encontrar una solución en Python, vi algunos artículos .

Y, por supuesto, mnoGoSearch es de código abierto, GNU GPL.

Fedir RYKHTIK
fuente