¿Existe un buen motor de indexación/búsqueda para Node.js? [closed]

6 minutos de lectura

Avatar de usuario de Venemo
Venemo

estoy buscando un buen fuente abierta (con LGPL o una licencia permisiva) motor de indexación para una aplicación node.js, algo así como Lucene. Estoy buscando indexación y búsqueda en proceso y no estoy interesado en indexar servidores como Sphinx o Solr.

Tampoco tengo miedo de crear enlaces para una biblioteca C/C++, así que también estoy abierto a ese tipo de sugerencias.

Hasta ahora he encontrado

  • nodo-cluceno que ya no parece mantenerse activamente (y tiene varios problemas abiertos)
  • Podría crear mi propio enlace para CLucene pero parece tener un mantenimiento bastante escaso y su versión actual también está bastante por detrás de Java Lucene
  • apache lucy que parece estar diseñado con el propósito de crear enlaces para lenguajes dinámicos, pero hasta ahora no tienen enlaces de nodos (ni una API C) y no he encontrado ningún documento sobre la creación de enlaces. Tampoco encontré ningún punto de referencia sobre su rendimiento.
  • búsqueda de nodos que parece estar abandonado
  • jsii que parece ser todavía un prototipo y también está abandonado
  • Prueba completa que solo está destinado a ejecutarse en un navegador web
  • lunr.js que parece permitir solo serializar todo el índice, por lo que no es escalable

Podría “hacer el mío”, pero preferiría usar una solución ya existente.

EDITAR: por qué no estoy interesado en un servidor de índice independiente: Utilizo una base de datos de almacenamiento de clave-valor rápida en proceso, por lo que sería un desperdicio tener que salir del proceso para realizar consultas.

Avatar de usuario de Fergie
Fergie

Solo una actualización de mi respuesta anterior: dado que hubo tanta discusión, no quería que esta actualización se perdiera.

Puedes Descargalo aquí:

  • Respuesta corta: no; Respuesta más larga: clasifica la búsqueda según la relevancia del documento y le da al propietario un control simple pero poderoso sobre cómo se determina la relevancia; Respuesta más larga: Forage no admite la clasificación en campos abstractos porque se ha visto fuera del alcance central del proyecto. Sin embargo, probablemente en algún momento en el futuro se agregará la funcionalidad de clasificación, ya que existe una demanda para ello.

    – Fergie

    28 de agosto de 2013 a las 11:02


  • ¿Cómo se calcula la relevancia del documento?

    – Venemo

    28 de agosto de 2013 a las 19:13

  • ¡Vaya, @user2020565! El forraje es totalmente accesible desde múltiples procesos 🙂

    – Fergie

    17 de julio de 2014 a las 9:23

  • Aparece usted está afiliado a norch. Tenga en cuenta que nuestro política de autopromoción requiere que divulgue esta información en respuestas como esta y que no mencione el producto en un gran porcentaje de sus publicaciones.

    – josliber

    5 de diciembre de 2015 a las 20:58

  • @josliber Dudo en estar a la altura de esto, pero para que conste: Norch es un proyecto de código abierto en el que yo y otros usamos nuestro tiempo libre por el bien de la humanidad, ya que no es comercial, está bajo mi nombre de usuario de GitHub. En cuanto a “un gran porcentaje de publicaciones”, eso simplemente no es cierto, pero, por supuesto, hacemos una cantidad (muy pequeña) de trabajo con conciencia, lo que equivale a un puñado de publicaciones en stackoverflow.

    – Fergie

    9 de marzo de 2016 a las 14:26


Avatar de usuario de Fergie
Fergie

Sí, echa un vistazo a los recién lanzados norco

Norch se basa en el índice de búsqueda módulo para node.js, que a su vez se basa en el potente índice levelDB de Google.

EDITAR: usa el módulo de índice de búsqueda para una capacidad de búsqueda rápida “en proceso”.

  • Que hace Norch añadir encima de search-index?

    – Venemo

    8 de julio de 2013 a las 15:19

  • Norch hace que el índice de búsqueda esté disponible en HTTP y agrega algunas otras cosas de GUI.

    – Fergie

    14/07/2013 a las 21:11

  • Habiendo dicho eso, search-index podría ser útil para mí, pero parece estar demasiado relacionado con LevelDB 🙁

    – Venemo

    15 de julio de 2013 a las 8:45

  • ¿Por qué LevelDB es ‘malo’?

    – Fergie

    16 de julio de 2013 a las 8:05

  • Aparece usted está afiliado a norch. Tenga en cuenta que nuestro política de autopromoción requiere que divulgue esta información en respuestas como esta y que no mencione el producto en un gran porcentaje de sus publicaciones.

    – josliber

    5 de diciembre de 2015 a las 20:58

Avatar de usuario de Matt Sergeant
Sargento mate

¿Puede explicar por qué no está interesado en usar un índice externo? Para la búsqueda de texto completo, siempre vuelvo a usar las capacidades de indexación de texto completo de PostgreSQL: es muy rápido, la indexación no requiere una actualización de índice completo (como lo hace Solr) y los resultados se devuelven más rápido que las soluciones basadas en Lucene (como Elastic Search). ).

Pero si realmente quieres hacerlo en el proceso, probablemente quieras mirar a Lunr: http://lunrjs.com/ – funciona en Node, no solo en el navegador.

Editar: aquí es donde obtuve mis estadísticas sobre que Postgres es más rápido que Lucene: http://fr.slideshare.net/billkarwin/full-text-search-in-postgresql – ver Diapositiva 49.

Editar: no estoy seguro de qué tipo de velocidad está buscando dentro/fuera del proceso, pero nuestra base de datos PostgreSQL puede realizar 100 000 consultas por segundo sin sudar, y ni siquiera está en SSD. Tal vez esté pensando demasiado en sus necesidades de rendimiento; después de todo, una vez que necesite ir a varios nodos (o usar un clúster para aprovechar todas las CPU), deberá realizar un volcado en el proceso de todos modos.

  • ” y los resultados se devuelven más rápido que las soluciones basadas en Lucene (como Elastic Search)”. ¿Algún punto de referencia para respaldar eso? Estoy casi seguro de que la mayoría de las críticas lo dirían al revés.

    – Geert-Jan

    19 mayo 2013 a las 18:07

  • Utilizo una base de datos en proceso muy rápida por su velocidad. Por lo tanto, tener un índice fuera de proceso lo haría bastante ridículo.

    – Venemo

    19 mayo 2013 a las 20:12

  • Miré lunr, sí, pero actualmente no admite la persistencia del índice sin tener que serializar todo el índice todo el tiempo.

    – Venemo

    19 mayo 2013 a las 20:14

  • +1 por recomendar el uso de fti, especialmente si su fuente de datos es un rdbms. a veces, la solución más cercana puede sacarlo de un apuro.

    – booyaa

    16 de julio de 2013 a las 8:34

  • @booyaa Mi fuente de datos no es un RDBMS.

    – Venemo

    1 de agosto de 2013 a las 18:47

Luz de búsqueda de texto completo, es un módulo de nodo escrito puro en JS para realizar búsquedas de texto completo. Aquí puede encontrar el enlace actual del repositorio de git: https://github.com/frankred/node-full-text-search-luz

¿Ha sido útil esta solución?