{"id":19000426,"url":"https://github.com/typesense/typesense-java","last_synced_at":"2025-04-07T15:05:34.380Z","repository":{"id":41842892,"uuid":"360961757","full_name":"typesense/typesense-java","owner":"typesense","description":"Java client for Typesense","archived":false,"fork":false,"pushed_at":"2025-02-18T16:05:17.000Z","size":487,"stargazers_count":64,"open_issues_count":15,"forks_count":32,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-03-31T14:09:17.297Z","etag":null,"topics":["http-client","java","search","search-engine","typesense"],"latest_commit_sha":null,"homepage":"https://typesense.org/docs/latest/api/","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/typesense.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-04-23T17:39:38.000Z","updated_at":"2025-02-20T01:02:10.000Z","dependencies_parsed_at":"2023-11-07T00:18:15.397Z","dependency_job_id":"ef165e17-6f28-421d-bbe8-ccd1c410fcb7","html_url":"https://github.com/typesense/typesense-java","commit_stats":null,"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typesense%2Ftypesense-java","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typesense%2Ftypesense-java/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typesense%2Ftypesense-java/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typesense%2Ftypesense-java/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/typesense","download_url":"https://codeload.github.com/typesense/typesense-java/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247675597,"owners_count":20977376,"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":["http-client","java","search","search-engine","typesense"],"created_at":"2024-11-08T18:07:11.064Z","updated_at":"2025-04-07T15:05:34.336Z","avatar_url":"https://github.com/typesense.png","language":"Java","readme":"# Typesense Java Client ☕ 🔍\n\nJava client library for accessing the HTTP API of [Typesense](https://typesense.org) search engine.\n\n## Installation\n\nThe client is available on Maven central:\n\n```groovy\ndependencies {\n    implementation 'org.typesense:typesense-java:1.3.0'\n}\n```\n\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.typesense\u003c/groupId\u003e\n    \u003cartifactId\u003etypesense-java\u003c/artifactId\u003e\n    \u003cversion\u003e1.3.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n```java\nimport org.typesense.api.*;\nimport org.typesense.model.*;\nimport org.typesense.resources.*;\n```\n\n## Usage\n\n### Create a new client\n```java\nList\u003cNode\u003e nodes = new ArrayList\u003c\u003e();\nnodes.add(\n  new Node(\n    \"http\",       // For Typesense Cloud use https\n    \"localhost\",  // For Typesense Cloud use xxx.a1.typesense.net\n    \"8108\"        // For Typesense Cloud use 443\n  )\n);\n\nConfiguration configuration = new Configuration(nodes, Duration.ofSeconds(2),\"\u003cAPI_KEY\u003e\");\n\nClient client = new Client(configuration);\n ```\n\n### Create a new collection\n```java\nList\u003cField\u003e fields = new ArrayList\u003c\u003e();\nfields.add(new Field().name(\"countryName\").type(FieldTypes.STRING));\nfields.add(new Field().name(\"capital\").type(FieldTypes.STRING));\nfields.add(new Field().name(\"gdp\").type(FieldTypes.INT32).facet(true).sort(true));\n\nCollectionSchema collectionSchema = new CollectionSchema();\ncollectionSchema.name(\"Countries\").fields(fields).defaultSortingField(\"gdp\");\n\nclient.collections().create(collectionSchema);\n```\n\n### Create a new collection from JSON file\n```java\nString schemaJson = new String(\n    Files.readAllBytes(Paths.get(\"schema.json\")),\n    StandardCharsets.UTF_8\n);\nclient.collections().create(schemaJson);\n```\n\n### Index a document\n```java\nMap\u003cString, Object\u003e hmap = new HashMap\u003c\u003e();\nhmap.put(\"countryName\",\"India\");\nhmap.put(\"capital\",\"Delhi\");\nhmap.put(\"gdp\", 10);\n\nclient.collections(\"Countries\").documents().create(hmap);\n```\n\n### Upserting a document\n```java\nMap\u003cString, Object\u003e hmap = new HashMap\u003c\u003e();\nhmap.put(\"countryName\",\"India\");\nhmap.put(\"capital\",\"Delhi\");\nhmap.put(\"gdp\", 5);\n\nclient.collections(\"Countries\").documents().upsert(hmap);\n```\n\n### Import batch of documents\n```java\nImportDocumentsParameters queryParameters = new ImportDocumentsParameters();\nqueryParameters.action(\"create\");\n\nString documentList = \"{\\\"countryName\\\": \\\"India\\\", \\\"capital\\\": \\\"Washington\\\", \\\"gdp\\\": 5215}\\n\" +\n                      \"{\\\"countryName\\\": \\\"Iran\\\", \\\"capital\\\": \\\"London\\\", \\\"gdp\\\": 5215}\";\n// Import your document as JSONL string from a file.\nclient.collections(\"Countries\").documents().import_(documentList, queryParameters)\n```\n\n### Search in a collection\n```java\nSearchParameters searchParameters = new SearchParameters()\n                                        .q(\"tokoyo\")\n                                        .queryBy(\"countryName,capital\")\n                                        .prefix(\"true,false\");\nSearchResult searchResult = client.collections(\"Countries\").documents().search(searchParameters);\n```\n\n### Update a document\n```java\nMap\u003cString, Object\u003e hmap = new HashMap\u003c\u003e();\nhmap.put(\"gdp\", 8);\nclient.collections(\"Countries\").documents(\"28\").update(hmap);\n```\n\n### Retrieve a document\n```java\nclient.collections(\"Countries\").documents(\"28\").retrieve();\n```\n\n### Delete a document\n```java\nclient.collections(\"Countries\").documents(\"28\").delete();\n```\n\n### Delete documents using query\n```java\nDeleteDocumentsParameters deleteDocumentsParameters = new DeleteDocumentsParameters();\ndeleteDocumentsParameters.filterBy(\"gdp:=[2,8]\");\ndeleteDocumentsParameters.batchSize(10);\n```\n\n### Retrieve a collection\n```java\nclient.collections(\"Countries\").retrieve();\n```\n\n### Retrieve all collections\n```java\nclient.collections().retrieve();\n```\n\n### Drop a collection\n```java\nclient.collections(\"Countries\").delete();   \n```\n\n### Export a collection\n```java\nclient.collections(\"Countries\").documents().export();\n```\n\n### Create an analytics rule\n```java\nAnalyticsRuleSchema analyticsRule = new AnalyticsRuleSchema();\nanalyticsRule.setName(\"popular-queries\");\nanalyticsRule.setType(AnalyticsRuleSchema.TypeEnum.POPULAR_QUERIES);\nanalyticsRule.setParams(new AnalyticsRuleParameters()\n        .source(new AnalyticsRuleParametersSource()\n                .collections(Arrays.asList(\"Countries\")))\n        .destination(new AnalyticsRuleParametersDestination()\n                .collection(\"top_searches\")));\n\nclient.analytics().rules().create(analyticsRule);\n```\n\n### Upsert an analytics rule\n```java\nAnalyticsRuleUpsertSchema analyticsRule = new AnalyticsRuleUpsertSchema()\n        .type(AnalyticsRuleUpsertSchema.TypeEnum.NOHITS_QUERIES)\n        .params(new AnalyticsRuleParameters()\n                .source(new AnalyticsRuleParametersSource()\n                        .collections(Arrays.asList(\"Countries\")))\n                .destination(new AnalyticsRuleParametersDestination()\n                        .collection(\"failed_searches\")));\n\nclient.analytics().rules().upsert(\"failed-searches\", analyticsRule);\n```\n\n### Retrieve all analytics rules\n```java\nAnalyticsRulesRetrieveSchema rules = client.analytics().rules().retrieve();\n```\n\n### Retrieve a single analytics rule\n```java\nAnalyticsRuleSchema rule = client.analytics().rules(\"failed-searches\").retrieve();\n```\n\n### Delete an analytics rule\n```java\nclient.analytics().rules(\"failed-searches\").delete();\n```\n\n#### Create an analytics event\n```java\nAnalyticsEventCreateSchema analyticsEvent = new AnalyticsEventCreateSchema()\n        .type(\"conversion\")\n        .name(\"purchase_made\")\n        .data(Map.of(\n                \"product_id\", \"123\",\n                \"user_id\", \"user_456\",\n                \"amount\", \"99.99\"\n        ));\n\nclient.analytics().events().create(analyticsEvent);\n```\n\n### Upsert a stopwords set\n```java\nList\u003cString\u003e stopwords = new ArrayList\u003c\u003e();\nstopwords.add(\"the\");\nstopwords.add(\"of\");\nstopwords.add(\"and\");\n\nStopwordsSetUpsertSchema stopwordsSet = new StopwordsSetUpsertSchema();\nstopwordsSet.stopwords(stopwords);\n\nclient.stopwords().upsert(\"common-words\", stopwordsSet);\n```\n\n### Retrieve a stopwords set\n```java\nStopwordsSetRetrieveSchema set = client.stopwords(\"common-words\").retrieve();\n```\n\n### Retrieve all stopwords sets\n```java\nStopwordsSetsRetrieveAllSchema sets = client.stopwords().retrieve();\n```\n\n### Delete a stopwords set\n```java\nclient.stopwords(\"common-words\").delete();\n```\n\n### Create an API key\n```java\nApiKeySchema apiKeySchema = new ApiKeySchema();\nList\u003cString\u003e actionValues = new ArrayList\u003c\u003e();\nList\u003cString\u003e collectionValues = new ArrayList\u003c\u003e();\n\nactionValues.add(\"*\");\ncollectionValues.add(\"*\");\n\napiKeySchema.description(\"Admin Key\").actions(actionValues).collections(collectionValues);\n\nclient.keys().create(apiKeySchema);\n```\n\n### Create search only API key\n```java\nApiKeySchema apiKeySchema = new ApiKeySchema();\nList\u003cString\u003e actionValues = new ArrayList\u003c\u003e();\nList\u003cString\u003e collectionValues = new ArrayList\u003c\u003e();\n\nactionValues.add(\"documents:search\");\ncollectionValues.add(\"Countries\");\n\napiKeySchema.description(\"Search only Key\").actions(actionValues).collections(collectionValues);\n\nclient.keys().create(apiKeySchema);\n```\n\n### Retrieve an API key\n```java\nclient.keys(\"6\").retrieve();\n```\n\n### List all the API keys\n```java\nclient.keys().retrieve();\n```\n\n### Delete an API keys\n```java\nclient.keys(\"6\").delete();\n```\n\n### Create or update an override\n```java\nSearchOverrideSchema searchOverrideSchema = new SearchOverrideSchema();\n\nList\u003cSearchOverrideInclude\u003e searchOverrideIncludes = new ArrayList\u003c\u003e();\nsearchOverrideIncludes.add(new SearchOverrideInclude().id(\"422\").position(1));\nsearchOverrideIncludes.add(new SearchOverrideInclude().id(\"54\").position(2));\n\nList\u003cSearchOverrideExclude\u003e searchOverrideExcludes = new ArrayList\u003c\u003e();\nsearchOverrideExcludes.add(new SearchOverrideExclude().id(\"287\"));\n\nsearchOverrideSchema.rule(new SearchOverrideRule().query(\"new york\").match(\"exact\"))\n                    .includes(searchOverrideIncludes)\n                    .excludes(searchOverrideExcludes);\n\nclient.collections(\"Countries\").overrides().upsert(\"new-york\", searchOverrideSchema)\n```\n\n### Retrieve an Alias\n```java\nclient.collections(\"Countries\").overrides(\"new-york\").retrieve();\n```\n\n### List all overrides\n```java\nclient.collections(\"Countries\").overrides().retrieve();\n```\n\n### Delete an override\n```java\nclient.collections(\"Countries\").overrides(\"new-york\").delete();\n```\n\n### Upsert an Alias\n```java\nCollectionAliasSchema collectionAliasSchema = new CollectionAliasSchema();\ncollectionAliasSchema.collectionName(\"Countries\");\n\nclient.aliases().upsert(\"countries2\", collectionAliasSchema)\n```\n\n### Retrieve an Alias\n```java\nclient.aliases(\"countries2\").retrieve();\n```\n\n### List all Aliases\n```java\nclient.aliases().retrieve();\n```\n\n### Delete an Alias\n```java\nclient.aliases(\"countries2\").delete();\n```\n\n### Upsert a multi-way synonym\n```java\nSearchSynonymSchema synonym = new SearchSynonymSchema();\nsynonym.addSynonymsItem(\"France\").addSynonymsItem(\"Germany\").addSynonymsItem(\"Sweden\");\n\nclient.collections(\"Countries\").synonyms().upsert(\"country-synonyms\",synonym)\n```\n\n### Upsert a single-way synonym\n```java\nSearchSynonymSchema synonym = new SearchSynonymSchema();\nsynonym.root(\"europe\");\nsynonym.addSynonymsItem(\"France\").addSynonymsItem(\"Germany\").addSynonymsItem(\"Sweden\");\n\nclient.collections(\"Countries\").synonyms().upsert(\"continent-synonyms\",synonym)\n```\n\n### Retrieve a synonym\n```java\nclient.collections(\"Countries\").synonyms(\"continent-synonyms\").retrieve();\n```\n\n### Retrieve all synonyms\n```java\nclient.collections(\"Countries\").synonyms().retrieve();\n```\n\n### Delete a synonym\n```java\nclient.collections(\"Countries\").synonyms(\"continent-synonyms\").delete();\n```\n\n### Create snapshot (for backups)\n```java\nMap\u003cString, String\u003e query = new HashMap\u003c\u003e();\nquery.put(\"snapshot_path\",\"/tmp/typesense-data-snapshot\");\n\nclient.operations.perform(\"snapshot\",query);\n```\n\n### Re-elect Leader\n```java\nclient.operations.perform(\"vote\");\n```\n\n### Check health\n```java\nclient.health.retrieve();\n```\n## Contributing\n\nPlease read [CONTRIBUTING.md](https://github.com/typesense/typesense-java/blob/master/CONTRIBUTING.md) for details on the process for submitting pull requests to this repository.\n\n## License\n`typesense-java` is distributed under the Apache 2 license.\n\n## Support\nPlease open a Github issue or join our [Slack Community](https://join.slack.com/t/typesense-community/shared_invite/zt-mx4nbsbn-AuOL89O7iBtvkz136egSJg)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftypesense%2Ftypesense-java","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftypesense%2Ftypesense-java","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftypesense%2Ftypesense-java/lists"}