J'ai un programme java, qui lit tous les mots d'un fichier PDF. J'ai sauvé les mots avec les pagenumbers dans une base de données (couchDB). Maintenant, je veux écrire une carte et une fonction de réduction, qui liste chaque mot avec les numéros de page où le mot se produit, mais si les mots se produisent plus d'une fois sur une page, je veux juste une entrée. Le résultat devrait être une ligne avec mot et une deuxième ligne avec une liste (chaîne séparée par une virgule) de pagenumbers. Chaque mot avec le numéro de page est un document séparé dans couchDB. Comment est-ce que je peux faire ceci avec une fonction map-reduce (filtrez les mêmes entrées de pagenumbers)? Merci pour votre aide.fonction map-reduce dans CouchDB
Répondre
Sûrement il y a plus d'une façon de le faire. J'irais pour quelque chose de simple. Disons que vos documents ressemblent un peu à ceci:
{ 'type': 'word-index', 'word': 'Great', 'page_number': 45 }
Ceci est le résultat de trouver le mot « grand » à la page 45. Maintenant, l'index de vue est créée par une fonction de vue:
function map(doc) {
if (doc.type == 'word-index') {
emit([doc.word, doc.page_number], null);
}
}
Pour réduisez la partie utilisez juste le "_count" intégré. Maintenant, pour obtenir la liste de toutes les occurrences du mot "Great" dans votre livre, il suffit d'interroger votre vue avec startkey = ["Great"] et endkey = ["Great", {}]. Maintenant, le résultat ressemblerait un peu comme:
["Great", 45], 4
["Great", 70], 7
Ce qui signifie que monde « Great » est apparu 4 fois à la page 45 et 7 fois à la page 70. Vous pouvez extraire votre liste séparée par des virgules vous avez besoin de lui. Le nombre d'occurrences est un bonus.
--edit--
Vous devez également utiliser group_level = 2 dans votre requête. Si vous ne faites pas le résultat de la requête serait simplement une seule ligne avec le décompte de tous les documents que vous avez.
- 1. CouchDB MapReduce requête pour les données relationnelles
- 2. Puis-je interroger une vue dans CouchDB en utilisant mapreduce?
- 3. Fonction MapReduce MongoDB NodeJs
- 4. Débogage de la fonction mapreduce() dans R
- 5. JQuery TypeError dans la fonction CouchDB OpenDoc
- 6. Sélection de n éléments appartenant à un utilisateur dans un MapReduce pour CouchDB
- 7. Taskid dans MapReduce
- 8. Réduire les fonctions dans PHPillow pour CouchDB
- 9. Hadoop CouchDB Elastic Recherche
- 10. Lien documents dans CouchDB
- 11. Appliquer la fonction et trier dans MongoDB sans MapReduce
- 12. où condition dans mongodb mapreduce
- 13. Joints dans MapReduce
- 14. TotalOrderPartitioner dans MapReduce exemple
- 15. Erreur dans Hadoop MapReduce
- 16. Persistance dans MapReduce
- 17. MongoDB: Calcul tort dans MapReduce
- 18. CouchDb - Empêcher couchDb de fournir une vue
- 19. CouchDB: L'accès à deux documents dans une montre fonction
- 20. map/reduce fonction sur les objets JSON dans CouchDB
- 21. Retourne _rev et _id dans la fonction CouchDB _update?
- 22. Utilisation de Views dans couchDB
- 23. Problème MapReduce
- 24. Groupe CouchDB Niveau et tessiture
- 25. Arbres dans CouchDB
- 26. Pagination dans CouchDB?
- 27. UUIDs dans CouchDB
- 28. utilisateurs Sélectionnez dans CouchDB
- 29. Condition similaire dans CouchDB
- 30. Déduplication/correspondance dans Couchdb?
Merci pour votre réponse rapide. Je dois le tester plus tard, mais si je veux une liste: Great 45, 70, 234. le mot great ne devrait figurer qu'une seule fois. Et la fonction devrait le faire pour tous les mots (documents) dans la base de données. – user2447116
Comment puis-je gérer avec une fonction de réduction pour filtrer les multiples numéros de page? – user2447116
Eh bien, je ne sais pas Java, ou les liaisons api pour couchdb. Mon point est que lorsque vous interrogez une vue comme celle-ci, vous recevrez la liste des paires clé-valeur. Vos clés sont de la forme ["World", page_number]. Pour obtenir la liste, vous devez simplement prendre toutes les lignes avec les clés ayant le même premier élément et extraire la seconde. Merci de le réduire, c'est unique. Juste une chose de plus que je viens de réaliser, vous devez également utiliser group_level = 2 à votre requête pour obtenir ce résultat. Si vous ne le faites pas, vous obtiendrez une seule ligne dans le résultat. –