{"id":18291103,"url":"https://github.com/hakdogan/elasticsearch","last_synced_at":"2025-10-13T11:33:01.081Z","repository":{"id":10130962,"uuid":"12203021","full_name":"hakdogan/ElasticSearch","owner":"hakdogan","description":":globe_with_meridians: This application illustrates and demonstrates use of ElasticSearch Java API in the backend","archived":false,"fork":false,"pushed_at":"2023-12-17T18:11:51.000Z","size":4437,"stargazers_count":117,"open_issues_count":3,"forks_count":86,"subscribers_count":20,"default_branch":"master","last_synced_at":"2025-04-04T13:53:19.034Z","etag":null,"topics":["elasticsearch","elasticsearch-java-api","rest-client"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hakdogan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2013-08-18T22:49:09.000Z","updated_at":"2025-02-08T21:05:05.000Z","dependencies_parsed_at":"2023-12-17T19:37:01.724Z","dependency_job_id":null,"html_url":"https://github.com/hakdogan/ElasticSearch","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hakdogan%2FElasticSearch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hakdogan%2FElasticSearch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hakdogan%2FElasticSearch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hakdogan%2FElasticSearch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hakdogan","download_url":"https://codeload.github.com/hakdogan/ElasticSearch/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247324490,"owners_count":20920655,"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","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":["elasticsearch","elasticsearch-java-api","rest-client"],"created_at":"2024-11-05T14:13:14.662Z","updated_at":"2025-10-13T11:32:56.038Z","avatar_url":"https://github.com/hakdogan.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"A demonstration of how to use Elasticsearch Java API\r\n===================================================\r\n\r\nThis repository demonstrates the use of Elasticsearch Java API via `Java High Level REST Client`. If you want to see the sample of the old version, please visit the [oldVersion](https://github.com/hakdogan/ElasticSearch/tree/oldVersion) branch.\r\n\r\n## What you will learn in this repository?\r\n\r\n* How to use Java High Level REST Client\r\n  * How to perform Administration operations\r\n  * Index creation\r\n  * Mapping settings\r\n  * How to perform CRUD operations\r\n\r\n\r\n\r\n### Initialization Java High Level REST Client\r\n```java\r\n    @Bean(destroyMethod = \"close\")\r\n    public RestHighLevelClient getRestClient() {\r\n        return new RestHighLevelClient(RestClient.builder(new HttpHost(props.getClients().getHostname(),\r\n                props.getClients().getHttpPort(), props.getClients().getScheme())));\r\n    }\r\n```\r\n\r\n### Index creation and Shard, Replica settings with Java High Level REST Client\r\n```java\r\nfinal GetIndexRequest request = new GetIndexRequest(props.getIndex().getName());\r\nfinal boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);\r\n\r\nif (!exists) {\r\n    \r\n  final CreateIndexRequest indexRequest = new CreateIndexRequest(props.getIndex().getName());\r\n  indexRequest.settings(Settings.builder()\r\n       .put(\"index.number_of_shards\", props.getIndex().getShard())\r\n       .put(\"index.number_of_replicas\", props.getIndex().getReplica())\r\n  );\r\n\r\n  final CreateIndexResponse createIndexResponse = client.indices().create(indexRequest, RequestOptions.DEFAULT);\r\n  if (createIndexResponse.isAcknowledged() \u0026\u0026 createIndexResponse.isShardsAcknowledged()) {\r\n      log.info(\"{} index created successfully\", props.getIndex().getName());\r\n  } else {\r\n      log.debug(\"Failed to create {} index\", props.getIndex().getName());\r\n  }\r\n\r\n}\r\n```\r\n\r\n### Mapping Settings\r\n```java\r\n    \r\nfinal PutMappingRequest mappingRequest = new PutMappingRequest(props.getIndex().getName());\r\nfinal XContentBuilder builder = XContentFactory.jsonBuilder();\r\n    \r\nbuilder.startObject();\r\n...\r\nbuilder.endObject();        \r\n\r\nmappingRequest.source(builder);\r\nfinal AcknowledgedResponse putMappingResponse = client.indices().putMapping(mappingRequest, RequestOptions.DEFAULT);\r\n\r\nif (putMappingResponse.isAcknowledged()) {\r\n    log.info(\"Mapping of {} was successfully created\", props.getIndex().getName());\r\n} else {\r\n    log.debug(\"Creating mapping of {} failed\", props.getIndex().getName());\r\n}\r\n```\r\n\r\n### Using SearchSourceBuilder and showing search results\r\n```java\r\nsourceBuilder.query(builder);\r\nSearchRequest searchRequest = getSearchRequest();\r\n\r\nSearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);\r\nSearchHits hits = searchResponse.getHits();\r\nSearchHit[] searchHits = hits.getHits();\r\nfor (SearchHit hit : searchHits) {\r\n    Document doc = gson.fromJson(hit.getSourceAsString(), Document.class);\r\n    doc.setId(hit.getId());\r\n    result.add(doc);\r\n}\r\n```\r\n\r\n### Using Query String with Wildcard\r\n```java\r\nresult = getDocuments(QueryBuilders.queryStringQuery(\"*\" + query.toLowerCase() + \"*\"));\r\n```\r\n\r\n### Document deletion\r\n```\r\nfinal DeleteRequest deleteRequest = new DeleteRequest(props.getIndex().getName(), id);\r\nclient.delete(deleteRequest, RequestOptions.DEFAULT);\r\n```\r\n\r\n## How to compile?\r\n```\r\nmvn clean install\r\n```\r\nThe docker-maven-plugin needs Docker daemon, if you don't have it you should use `-Dmaven.test.skip=true -Ddocker.skip` parameters.\r\n\r\n## How to run?\r\n```\r\nmvn spring-boot:run\r\n```\r\n\r\nWith this option, you should provide an `elasticsearch server`.\r\n\r\n## How to run with Docker?\r\n```\r\nsh run.sh\r\n```\r\n\r\nWith this option, this application and an `elasticsearch server` run together.\r\n\r\n![](image/image.gif)\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhakdogan%2Felasticsearch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhakdogan%2Felasticsearch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhakdogan%2Felasticsearch/lists"}