0

J'ai 13 000 pages Web indexées avec leur corps de texte. L'objectif est d'obtenir les 200 premières fréquences de phrase pour un mot, deux mots, trois mots ... jusqu'à huit phrases de mots.Réglage d'une requête d'agrégation sur plusieurs filtres de bardeaux

Il y a un total de plus de 150 millions de mots de ces pages Web qui doivent être tokenized.

Le problème est que la requête prend environ 15 minutes, après quoi il court d'espace de tas, à défaut de remplir.

Je teste cela sur un noyau 4 cpu, 8 Go de RAM, SSD serveur ubuntu. 6 Go de RAM sont affectés en tas. Le swap est désactivé.

Maintenant, je peux le faire en se divisant en 8 indices différents, la combinaison requête/paramètres/mapping fonctionne pour les phrases de mots de type unique. C'est-à-dire, je peux courir ceci sur les expressions d'un-mot, les expressions de deux-mots, etc. seul où j'obtiens le résultat que j'attends (bien que cela prenne encore environ 5 minutes chacun). Je me demandais s'il y avait un moyen de régler cette agrégation complète pour travailler avec mon matériel avec un index et une requête.

Paramètres et applications:

{ 
    "settings":{ 
     "index":{ 
     "number_of_shards" : 1, 
     "number_of_replicas" : 0, 
     "analysis":{ 
      "analyzer":{ 
       "analyzer_shingle_2":{ 
        "tokenizer":"standard", 
        "filter":["standard", "lowercase", "filter_shingle_2"] 
       }, 
       "analyzer_shingle_3":{ 
        "tokenizer":"standard", 
        "filter":["standard", "lowercase", "filter_shingle_3"] 
       }, 
       "analyzer_shingle_4":{ 
        "tokenizer":"standard", 
        "filter":["standard", "lowercase", "filter_shingle_4"] 
       }, 
       "analyzer_shingle_5":{ 
        "tokenizer":"standard", 
        "filter":["standard", "lowercase", "filter_shingle_5"] 
       }, 
       "analyzer_shingle_6":{ 
        "tokenizer":"standard", 
        "filter":["standard", "lowercase", "filter_shingle_6"] 
       }, 
       "analyzer_shingle_7":{ 
        "tokenizer":"standard", 
        "filter":["standard", "lowercase", "filter_shingle_7"] 
       }, 
       "analyzer_shingle_8":{ 
        "tokenizer":"standard", 
        "filter":["standard", "lowercase", "filter_shingle_8"] 
       } 
      }, 
      "filter":{ 
       "filter_shingle_2":{ 
        "type":"shingle", 
        "max_shingle_size":2, 
        "min_shingle_size":2, 
        "output_unigrams":"false" 
       }, 
       "filter_shingle_3":{ 
        "type":"shingle", 
        "max_shingle_size":3, 
        "min_shingle_size":3, 
        "output_unigrams":"false" 
       }, 
       "filter_shingle_4":{ 
        "type":"shingle", 
        "max_shingle_size":4, 
        "min_shingle_size":4, 
        "output_unigrams":"false" 
       }, 
       "filter_shingle_5":{ 
        "type":"shingle", 
        "max_shingle_size":5, 
        "min_shingle_size":5, 
        "output_unigrams":"false" 
       }, 
       "filter_shingle_6":{ 
        "type":"shingle", 
        "max_shingle_size":6, 
        "min_shingle_size":6, 
        "output_unigrams":"false" 
       }, 
       "filter_shingle_7":{ 
        "type":"shingle", 
        "max_shingle_size":7, 
        "min_shingle_size":7, 
        "output_unigrams":"false" 
       }, 
       "filter_shingle_8":{ 
        "type":"shingle", 
        "max_shingle_size":8, 
        "min_shingle_size":8, 
        "output_unigrams":"false" 
       } 
      } 
     } 
     } 
    }, 
    "mappings":{ 
     "items":{ 
     "properties":{ 
      "body":{ 
       "type": "multi_field", 
       "fields": { 
        "two-word-phrases": { 
        "analyzer":"analyzer_shingle_2", 
        "type":"string" 
        }, 
        "three-word-phrases": { 
        "analyzer":"analyzer_shingle_3", 
        "type":"string" 
        }, 
        "four-word-phrases": { 
        "analyzer":"analyzer_shingle_4", 
        "type":"string" 
        }, 
        "five-word-phrases": { 
        "analyzer":"analyzer_shingle_5", 
        "type":"string" 
        }, 
        "six-word-phrases": { 
        "analyzer":"analyzer_shingle_6", 
        "type":"string" 
        }, 
        "seven-word-phrases": { 
        "analyzer":"analyzer_shingle_7", 
        "type":"string" 
        }, 
        "eight-word-phrases": { 
        "analyzer":"analyzer_shingle_8", 
        "type":"string" 
        } 
       } 
      } 
     } 
     } 
    } 
} 

Requête:

{ 
    "size" : 0, 
    "aggs" : { 
    "one-word-phrases" : { 
     "terms" : { 
     "field" : "body", 
     "size" : 200 
     } 
    }, 
    "two-word-phrases" : { 
     "terms" : { 
     "field" : "body.two-word-phrases", 
     "size" : 200 
     } 
    }, 
    "three-word-phrases" : { 
     "terms" : { 
     "field" : "body.three-word-phrases", 
     "size" : 200 
     } 
    }, 
    "four-word-phrases" : { 
     "terms" : { 
     "field" : "body.four-word-phrases", 
     "size" : 200 
     } 
    }, 
    "five-word-phrases" : { 
     "terms" : { 
     "field" : "body.five-word-phrases", 
     "size" : 200 
     } 
    }, 
    "six-word-phrases" : { 
     "terms" : { 
     "field" : "body.six-word-phrases", 
     "size" : 200 
     } 
    }, 
    "seven-word-phrases" : { 
     "terms" : { 
     "field" : "body.seven-word-phrases", 
     "size" : 200 
     } 
    }, 
    "eight-word-phrases" : { 
     "terms" : { 
     "field" : "body.eight-word-phrases", 
     "size" : 200 
     } 
    } 
    } 
} 
+0

Je ne pense pas. Réduisez la taille ou exécutez des agrégations individuelles. Ou ne l'exécutez pas sur votre ordinateur portable mais sur quelque chose avec plus de RAM. Et même alors peut-être que ce ne sera pas suffisant. –

Répondre

1

Avez-vous vraiment besoin de votre collection entière en mémoire? Votre analyse pourrait être réécrite sous la forme d'un pipeline de traitement par lots avec une fraction des besoins en ressources:

  1. Parse rampé chaque site et les bardeaux de sortie à une série de fichiers plats: n-grams in python, four, five, six grams?
  2. Trier les fichiers de sortie de bardeaux
  3. Parse les fichiers de sortie de galets et les fichiers de comptage de bardeaux de sortie
  4. Parse tous les fichiers de comptage bardeau et la sortie d'un fichier de comptage de bardeaux total maître
  5. Trier par nombre décroissant

(Ce genre de chose se fait souvent dans un pipeline UNIX et parallélisée.)


Ou vous pouvez l'exécuter avec plus de mémoire.

+0

Cela semble assez faisable. Laissez-moi tester cela et revenir à vous. – HyderA

+0

Les fichiers plats se sont révélés beaucoup plus rapides - merci Peter! Vous avez une prime qui vous attend;) – HyderA

+0

Génial! Content que ça a marché! Et merci pour la générosité (bien que vous puissiez devoir l'attribuer spécifiquement à cette réponse bc je ne l'ai pas reçu.) –