2011-08-19 3 views
1

J'essaie d'indexer environ 3 millions de documents texte dans solr. Environ 1/3 de ces fichiers sont des emails qui contiennent environ 1 à 5 paragraphes de texte. Les fichiers 2/3 restants n'ont que quelques mots à chaque phrase.Optimisation de Lucid/Solr pour indexer de gros documents texte

Il faut près de 1 heure à Lucid/Solr pour indexer complètement l'ensemble de données complet avec lequel je travaille. J'essaie de trouver des façons d'optimiser cela. J'ai installé Lucid/Solr pour ne valider que tous les 100 000 fichiers, et il indexe les fichiers en lots de 50 000 fichiers à la fois. La mémoire n'est plus un problème, car il reste constamment autour de 1 Go de mémoire en raison du traitement par lots.

L'intégralité de l'ensemble de données doit être indexée initialement. C'est comme un système hérité qui doit être chargé sur un nouveau système, les données doivent donc être indexées et doivent être aussi rapides que possible, mais je ne suis pas certain des domaines à examiner pour optimiser cette période. Je pense que peut-être il y a beaucoup de petits mots comme "the, a, because, should, if, ..." qui causent beaucoup de frais généraux et ne sont que des mots "bruit". Je suis curieux si je les découpe si cela accélérerait considérablement le temps d'indexation. J'ai regardé les docs Lucid pendant un moment, mais je n'arrive pas à trouver un moyen de spécifier quels mots ne pas indexer. Je suis tombé sur le terme «liste d'arrêt» mais je n'ai pas vu beaucoup plus qu'une référence en passant.

Existe-t-il d'autres moyens de rendre cette indexation plus rapide ou suis-je simplement bloqué avec une heure d'indexation?

Répondre

0

Il semble de votre requête que le temps d'indexation est vraiment important pour votre application. Solr est un excellent moteur de recherche mais si vous avez besoin d'un temps d'indexation super rapide et si c'est un critère très important pour vous, vous devriez aller avec Sphinx Search Engine. Il ne vous faudra pas beaucoup de temps pour configurer et comparer rapidement vos résultats en utilisant Sphinx.

Il peut y avoir des moyens (comme celui que vous avez mentionné, mots d'arrêt etc.) pour optimiser cependant ce que vous faites en ce qui concerne le temps d'indexation Solr ne sera pas capable de battre Sphinx. J'ai fait un benchmarking moi-même. J'aime aussi énormément Solr pour sa facilité d'utilisation, ses fonctionnalités exceptionnelles comme l'indexation N-Gram, le facettage, le correcteur d'orthographe, le multicolore et son intégration avec d'autres produits Apache, etc. vient à des algorithmes optimisés (que ce soit la taille de l'index, l'heure de l'index, etc.) Sphinx bascule !!

Sphinx aussi est open source. Essayez ça.

+0

merci pour la réponse. Avez-vous des chiffres pour votre analyse comparative qui compare les temps de l'indice de solr aux temps de l'indice sphinx? Vous vous demandez si cela vaut vraiment la peine d'étudier l'accélération des temps d'indexation. Alors que les temps d'index sont importants pour mon application, je dois utiliser solr pour d'autres raisons. –

1

Nous avons récemment rencontré un problème similaire. Nous ne pouvons pas utiliser solrj car la requête et la réponse doivent passer par certaines applications, donc nous prenons les mesures suivantes: Creating Custom Solr Type to Stream Large Text Field!

  1. Utilisez GZipOutput/InputStream et Bse64Output/InputStream pour compresser le texte volumineux. Cela peut réduire la taille du texte d'environ 85%, ce qui peut réduire le temps de transfert de la demande/réponse.
  2. Pour réduire l'utilisation de la mémoire à côté client:

    2.1 Nous utilisons pour lire doc un par un api de flux (flux XML GSon ou Stax).

    2.2 Définir un type de champ Solr personnalisé: FileTextField qui accepte FileHolder comme valeur. FileTextField finira par passer un lecteur à Lucene. Lucene utilisera le lecteur pour lire le contenu et l'ajouter à l'index.

    2.3 Lorsque le champ de texte est trop grand, commencez par le décompresser en un fichier temporaire, créez une instance FileHolder, puis définissez l'occurrence FileHolder comme valeur de champ.

Questions connexes