web-dev-qa-db-fra.com

Existe-t-il un bon moteur d'indexation / recherche pour Node.js?

Je recherche un bon moteur d'indexation open source (avec LGPL ou une licence permissive) pour une application node.js, quelque chose comme Lucene. Je recherche l'indexation et la recherche en cours et je ne suis pas intéressé par l'indexation de serveurs comme Sphinx ou Solr.

Je n'ai pas peur de créer des liaisons pour une bibliothèque C/C++, donc je suis également ouvert à ce genre de suggestions.

Jusqu'à présent, j'ai trouvé

  • node-clucene qui ne semble plus être activement maintenu (et a plusieurs problèmes ouverts)
  • Je pourrais créer ma propre liaison pour CLucene mais elle semble être assez peu maintenue et sa version actuelle est également assez derrière la Java Lucene
  • Apache Lucy qui semble être conçu dans le but de créer des liaisons pour les langages dynamiques, mais jusqu'à présent, ils n'ont pas de liaisons de nœuds (ni d'API C) et je n'ai trouvé aucun document sur la création fixations. Je n'ai pas non plus trouvé de repères sur ses performances.
  • node-search qui semble abandonné
  • jsii qui semble être encore un prototype et est également abandonné
  • fullproof qui est uniquement destiné à fonctionner dans un navigateur Web
  • lunr.js qui ne semble autoriser que la sérialisation de l'index entier, donc n'est pas évolutif

Je pourrais "rouler le mien", mais je préférerais utiliser une solution déjà existante.

EDIT: Pourquoi je ne suis pas intéressé par un serveur d'index autonome: J'utilise une base de données de magasin de valeurs-clés en cours de traitement, donc ce serait tout un gaspillage devant sortir du processus de requête.

58
Venemo

Juste une mise à jour de ma réponse précédente - car il y avait tellement de discussions, je ne voulais pas que cette mise à jour soit perdue.

Vous pouvez le télécharger ici :

16
Fergie

Oui, consultez la nouvelle version Norch

Norch est basé sur le module search-index pour node.js, qui est à son tour basé sur le puissant index levelDB de Google.

EDIT: Utilisez le module d'index de recherche pour une capacité de recherche rapide "en cours".

13
Fergie

Pouvez-vous expliquer pourquoi vous n'êtes pas intéressé par l'utilisation d'un index externe? Pour la recherche en texte intégral, je reviens toujours à l'utilisation des capacités d'indexation en texte intégral de PostgreSQL - c'est très rapide, l'indexation ne nécessite pas de mise à jour d'index complète (comme le fait Solr), et les résultats sont retournés plus rapidement que les solutions basées sur Lucene (telles que Elastic Search ).

Mais si vous voulez vraiment le faire en cours de processus, vous voudrez probablement regarder Lunr: http://lunrjs.com/ - cela fonctionne dans Node, pas seulement dans le navigateur.

Edit: Voici où j'ai obtenu mes statistiques sur Postgres étant plus rapide que Lucene: http://fr.slideshare.net/billkarwin/full-text-search-in-postgresql - voir la diapositive 49.

Edit: Je ne sais pas quel type de vitesse vous recherchez dans/hors du processus, mais notre base de données PostgreSQL peut faire 100 000 requêtes par seconde sans casser une sueur, et ce n'est même pas sur les SSD. Vous pensez peut-être trop à vos besoins en matière de performances - après tout, une fois que vous devez aller sur plusieurs nœuds (ou utiliser un cluster pour tirer parti de tous les processeurs), vous devrez quand même effectuer un vidage en cours de traitement.

11
Matt Sergeant

Voyant de recherche de texte intégral , est un module de nœud écrit pur en JS pour effectuer des recherches de texte intégral. Ici vous pouvez trouver le lien du dépôt git actuel: https://github.com/frankred/node-full-text-search-light

2
Frank Roth