{"id":28780671,"url":"https://github.com/nlesc/benchmarking-elasticsearch","last_synced_at":"2025-09-12T22:38:01.365Z","repository":{"id":138553906,"uuid":"42864594","full_name":"NLeSC/benchmarking-elasticsearch","owner":"NLeSC","description":null,"archived":false,"fork":false,"pushed_at":"2015-11-02T14:55:09.000Z","size":623,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-06-26T20:08:29.655Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NLeSC.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-09-21T12:21:50.000Z","updated_at":"2015-11-11T21:28:01.000Z","dependencies_parsed_at":"2023-03-13T15:52:56.359Z","dependency_job_id":null,"html_url":"https://github.com/NLeSC/benchmarking-elasticsearch","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/NLeSC/benchmarking-elasticsearch","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NLeSC%2Fbenchmarking-elasticsearch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NLeSC%2Fbenchmarking-elasticsearch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NLeSC%2Fbenchmarking-elasticsearch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NLeSC%2Fbenchmarking-elasticsearch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NLeSC","download_url":"https://codeload.github.com/NLeSC/benchmarking-elasticsearch/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NLeSC%2Fbenchmarking-elasticsearch/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274887534,"owners_count":25368297,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-12T02:00:09.324Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-06-17T18:07:39.364Z","updated_at":"2025-09-12T22:38:01.324Z","avatar_url":"https://github.com/NLeSC.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Benchmarking Elasticsearch\r\n\r\nCode written by Eric de Kruijf for his master thesis '[Optimizing ElasticSearch\r\nfor Texcavator](https://github.com/NLeSC/benchmarking-elasticsearch/blob/master/doc/Master-Thesis_Optimizing-ElasticSearch-for_Texcavator_Eric-de-Kruijf.pdf)'\r\n\r\n## Scripts\r\n\r\n### convert_to_json.py\r\n\r\nDit Python script is afgeleid van import_kb.py en converteert de\r\nXML bestanden (de output van process_kb.py) tot .json bestanden.\r\nDit script neemt drie argumenten input_dir log_dir json_dir,\r\nwelke vergelijkbaar zijn aan import_kb.py, behalve de json_dir.\r\nAangezien dit script enkel XML naar JSON converteert, moet dit\r\nergens worden opgeslagen dus dit gebeurt in de json_dir.\r\n\r\n### import_json.sh\r\n\r\nDit script laadt de JSON bestanden een voor een in via een\r\neenvoudige for-loop en curl op de bulk API.\r\n\r\n### optimizekbs.sh\r\n\r\nDit script is een voorbeeld van het aanroepen van de optimize\r\nAPI op een bepaalde index.\r\n\r\n### par.sh / par_remote.sh\r\n\r\nDeze scripts maken gebruik van parallel om meerdere JSON bestanden\r\ntegelijkertijd de bulk API in te duwen. Let op, deze scripts zijn\r\nnog niet generiek. Deze scripts maken gebruik van processOne.sh en\r\nrespectievelijk processOne_remote.sh\r\n\r\n### processOne.sh / processOne_remote.sh\r\n\r\nDeze scripts worden gebruikt door par.sh en respectievelijk\r\npar_remote.sh om n van de JSON bestanden uit te pakken en door\r\nde bulk API te laten verwerken.\r\n\r\n### mapreduce1/mapred?.java\r\n\r\nDit zijn de verschillende iteraties van de mapreduce versie van\r\nhet genereren van wordclouds. Merk op dat dit dus geen gebruik maakt\r\nvan de beschikbare termvectors aangezien dit niet in queryvorm past:\r\n\r\n* mapred1.java -\u003e Eerste eenvoudige poging voor proof-of-concept\r\n* mapred2.java -\u003e Een iets generiekere versie, niet bijzonder\r\n* mapred3.java -\u003e Andrea's top-100 implementatie gebruikt welke\r\n\t\t                gebruik maakt van een Combiner\r\n* mapred4.java -\u003e Maakt gebruik van de cleanup methode bij de\r\n\t\t                Mapper, zodat je niet voor iedere term\r\n\t\t\t\t\tcollect aan hoeft te roepen.\r\n* mapred5.java -\u003e Haalt toch de cleanup methode bij de Mapper\r\n\t\t\t\t\t\tweer weg aangezien dit toch niet voordelig was.\r\n\t\t\t\t\t\tVoegt meer logic in welke ook in de Python\r\n\t\t\t\t\t\tversie wordt toegepast (minstens 2 letters).\r\n\t\t\t\t\t\tLet op dat de comment op regel 93 suggereert\r\n\t\t\t\t\t\tdat er gebruik wordt gemaakt van het geheugen\r\n\t\t\t\t\t\tlimiet, maar hier heb ik uiteindelijk vanaf\r\n\t\t\t\t\t\tgezien en ik heb een arbitraire waarde\r\n\t\t\t\t\t\tgekozen om vanaf dat punt alle redundante\r\n\t\t\t\t\t\twoorden alvast te verwijderen. Deze methode is\r\n\t\t\t\t\t\tuiteindelijk gebruikt voor de benchmarks.\r\n* mapred6.java -\u003e Voert een totaal andere mapreduce uit, namelijk\r\n\t\t\t\t\t\tom te kijken hoeveel woorden er gemiddeld per\r\n\t\t\t\t\t\tdocument zijn en hoeveel documenten er per query\r\n\t\t\t\t\t\tmatchen om inzicht te krijgen in de queries.\r\n\r\nElasticSearch-Hadoop is nodig om hier gebruik van te maken:\r\nhttps://www.elastic.co/products/hadoop\r\nIk heb zelf alle dependencies in ��n jar gegooid zodat ik in Hadoop\r\nniet de references in hoefde te stellen, maar dat is natuurlijk ook\r\nmogelijk.\r\n\r\n### queries/queries.java\r\n\r\nDit bestand is gebruikt om te kijken of de Python implementatie\r\ntrager was dan een Java implementatie aangezien de Python implementatie\r\ngebruik maakt van de REST API en Java werkelijk deelneemt aan het\r\ncluster en de interne communicatie gebruikt. De Java versie bouwt op\r\neen vergelijkbare manier de query op als in de Python versie. Echter,\r\ner zit wel een aantal onhandige dingen in aangezien het zeer slecht\r\ngedocumenteerd is wat je precies moet gebruiken. Het functioneert dus\r\nwel, maar kan hoogstwaarschijnlijk wel iets netter. Voornamelijk de\r\nexcludes zijn vrij raar herschreven aangezien ik dacht dat hier een\r\nfout in zat, maar uiteindelijk bleek de fout ergens anders te zitten en\r\nheb ik de moeite niet genomen om de herschreven versie weer te\r\nvereenvoudigen, het werkte immers.\r\n\r\n----\r\nDe volgende scripts maken allemaal gebruik van de beschikbare user queries.\r\nDeze queries zijn voor het gemak in een sqlite database gestopt, welke\r\nte vinden is als queries.db of enkel de queries in queries.sql. Ieder script\r\nhaalt uit de database de query gegevens en stopt de execution times terug\r\nin de/een database.\r\n----\r\n\r\n### wordcloud.hadoop.py / wordcloud.hadoop.sh\r\n\r\nDit script zorgt ervoor dat de hadoop versie van de wordcloud generation\r\nwordt uitgevoerd. Er zit hierin nog een aantal dingen wat hardcoded is,\r\nmaar dit is eenvoudig om te zetten tot parameters en voor een productie\r\nomgeving moet er sowieso het een en ander worden aangepast. Het\r\nbelangrijkste zit hem erin dat de hadoop versie een hele JSON string\r\nmeekrijgt als query.\r\n\r\n### wordcloud.java.py / wordcloud.java.sh\r\n\r\nDit script zorgt ervoor dat de java versie van de wordcloud generation\r\nwordt uitgevoerd. Deze krijgt wel alle gegevens van de query los en\r\nbouwt vervolgens zelf een query op.\r\n\r\n### wordcloud.py / wordcloud.sh\r\n\r\nDit script voert de Python versie uit. Deze code is uit de Texcavator\r\nsource gehaald en er is ook geexperimenteerd met het gebruik van de\r\nscroll methode in Python.\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnlesc%2Fbenchmarking-elasticsearch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnlesc%2Fbenchmarking-elasticsearch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnlesc%2Fbenchmarking-elasticsearch/lists"}