{"id":32419890,"url":"https://github.com/redis/redis-vl-java","last_synced_at":"2026-02-18T22:05:47.025Z","repository":{"id":319385726,"uuid":"1068693299","full_name":"redis/redis-vl-java","owner":"redis","description":"Redis Vector Library (RedisVL) -- the AI-native Java client for Redis.","archived":false,"fork":false,"pushed_at":"2025-12-19T00:39:18.000Z","size":2262,"stargazers_count":15,"open_issues_count":0,"forks_count":2,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-07T17:50:24.156Z","etag":null,"topics":["agentic-ai","ai","embeddings","generative-ai","java","llm","llm-cache","rag","rag-chatbot","redis","semantic-cache","semantic-routing","vector-database","vector-search","vectors"],"latest_commit_sha":null,"homepage":"https://redis.github.io/redis-vl-java/","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/redis.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,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-02T19:06:54.000Z","updated_at":"2026-01-09T12:10:07.000Z","dependencies_parsed_at":"2025-10-19T00:38:01.630Z","dependency_job_id":"3f2d84e0-1a9d-4e92-89a7-8092fb440beb","html_url":"https://github.com/redis/redis-vl-java","commit_stats":null,"previous_names":["redis/redis-vl-java"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/redis/redis-vl-java","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redis%2Fredis-vl-java","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redis%2Fredis-vl-java/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redis%2Fredis-vl-java/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redis%2Fredis-vl-java/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/redis","download_url":"https://codeload.github.com/redis/redis-vl-java/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redis%2Fredis-vl-java/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29596358,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-18T20:59:56.587Z","status":"ssl_error","status_checked_at":"2026-02-18T20:58:41.434Z","response_time":162,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["agentic-ai","ai","embeddings","generative-ai","java","llm","llm-cache","rag","rag-chatbot","redis","semantic-cache","semantic-routing","vector-database","vector-search","vectors"],"created_at":"2025-10-25T17:23:35.925Z","updated_at":"2026-02-18T22:05:47.020Z","avatar_url":"https://github.com/redis.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\" dir=\"auto\"\u003e\n    \u003cimg width=\"300\" src=\"https://raw.githubusercontent.com/redis/redis-vl-python/main/docs/_static/Redis_Logo_Red_RGB.svg\" style=\"max-width: 100%\" alt=\"Redis\"\u003e\n    \u003ch1\u003eVector Library \u003c/h1\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\" style=\"margin-top: 20px;\"\u003e\n    \u003cspan style=\"display: block; margin-bottom: 10px;\"\u003eThe AI-native Redis Java client\u003c/span\u003e\n    \u003cbr /\u003e\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n![Language](https://img.shields.io/badge/language-Java-orange)\n![Java Version](https://img.shields.io/badge/Java-17%2B-blue)\n[![Maven Central](https://img.shields.io/maven-central/v/com.redis/redisvl)](https://central.sonatype.com/artifact/com.redis/redisvl)\n[![Snapshots](https://img.shields.io/nexus/s/https/s01.oss.sonatype.org/com.redis/redisvl.svg)](https://s01.oss.sonatype.org/content/repositories/snapshots/com/redis/redisvl/)\n![GitHub last commit](https://img.shields.io/github/last-commit/redis/redis-vl-java)\n[![GitHub stars](https://img.shields.io/github/stars/redis/redis-vl-java)](https://github.com/redis/redis-vl-java/stargazers)\n\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n\u003cdiv display=\"inline-block\"\u003e\n    \u003ca href=\"https://github.com/redis/redis-vl-java\"\u003e\u003cb\u003eHome\u003c/b\u003e\u003c/a\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\n    \u003ca href=\"https://redis.github.io/redis-vl-java/redisvl/current/\"\u003e\u003cb\u003eDocumentation\u003c/b\u003e\u003c/a\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\n    \u003ca href=\"https://github.com/redis-developer/redis-ai-resources\"\u003e\u003cb\u003eRecipes\u003c/b\u003e\u003c/a\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  \u003c/div\u003e\n    \u003cbr /\u003e\n\u003c/div\u003e\n\n# Introduction\n\nRedis Vector Library (RedisVL) is the ultimate Java client designed for AI-native applications harnessing the power of [Redis](https://redis.io).\n\nRedisVL is your go-to client for:\n\n- Lightning-fast information retrieval \u0026 vector similarity search\n- Real-time RAG pipelines\n- LLM semantic caching\n- Hybrid search combining vectors and metadata\n\n# 💪 Getting Started\n\n## Installation\n\nAdd RedisVL to your Java (17+) project using Maven or Gradle:\n\n**Maven:**\n\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.redis\u003c/groupId\u003e\n    \u003cartifactId\u003eredisvl\u003c/artifactId\u003e\n    \u003cversion\u003e0.12.2\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n**Gradle:**\n\n```gradle\nimplementation 'com.redis:redisvl:0.12.2'\n```\n\n## Setting up Redis\n\nChoose from multiple Redis deployment options:\n\n1. [Redis Cloud](https://redis.io/try-free): Managed cloud database (free tier available)\n2. [Redis on Docker](https://hub.docker.com/_/redis): Docker image for development\n\n    ```bash\n    docker run -d --name redis -p 6379:6379 -p 8001:8001 redis:latest\n    ```\n\n3. [Redis Enterprise](https://redis.io/enterprise/): Commercial, self-hosted database\n4. [Azure Managed Redis](https://azure.microsoft.com/en-us/products/managed-redis): Fully managed Redis Enterprise on Azure\n\n\u003e Enhance your experience and observability with the free [Redis Insight GUI](https://redis.io/insight/).\n\n# Overview\n\n## 🗃️ Redis Index Management\n\n1. **Design a schema** for your use case that models your dataset with built-in Redis and indexable fields (*e.g. text, tags, numerics, geo, and vectors*). Load a schema from a YAML file:\n\n    ```yaml\n    index:\n      name: user-idx\n      prefix: user\n      storage_type: json\n\n    fields:\n      - name: user\n        type: tag\n      - name: credit_score\n        type: tag\n      - name: embedding\n        type: vector\n        attrs:\n          algorithm: flat\n          dims: 4\n          distance_metric: cosine\n          datatype: float32\n    ```\n\n    ```java\n    import com.redis.vl.schema.IndexSchema;\n\n    IndexSchema schema = IndexSchema.fromYaml(\"schemas/schema.yaml\");\n    ```\n\n    Or load directly from a Java Map:\n\n    ```java\n    Map\u003cString, Object\u003e schemaMap = Map.of(\n        \"index\", Map.of(\n            \"name\", \"user-idx\",\n            \"prefix\", \"user\",\n            \"storage_type\", \"json\"\n        ),\n        \"fields\", List.of(\n            Map.of(\"name\", \"user\", \"type\", \"tag\"),\n            Map.of(\"name\", \"credit_score\", \"type\", \"tag\"),\n            Map.of(\n                \"name\", \"embedding\",\n                \"type\", \"vector\",\n                \"attrs\", Map.of(\n                    \"algorithm\", \"flat\",\n                    \"datatype\", \"float32\",\n                    \"dims\", 4,\n                    \"distance_metric\", \"cosine\"\n                )\n            )\n        )\n    );\n\n    IndexSchema schema = IndexSchema.fromMap(schemaMap);\n    ```\n\n2. **Create a SearchIndex** class with an input schema to perform admin and search operations on your index in Redis:\n\n    ```java\n    import redis.clients.jedis.UnifiedJedis;\n    import com.redis.vl.index.SearchIndex;\n\n    // Define the index\n    UnifiedJedis jedis = new UnifiedJedis(\"redis://localhost:6379\");\n    SearchIndex index = new SearchIndex(schema, jedis);\n\n    // Create the index in Redis\n    index.create(true); // overwrite if exists\n    ```\n\n3. **Load and fetch** data to/from your Redis instance:\n\n    ```java\n    Map\u003cString, Object\u003e data = Map.of(\n        \"user\", \"john\",\n        \"credit_score\", \"high\",\n        \"embedding\", new float[]{0.23f, 0.49f, -0.18f, 0.95f}\n    );\n\n    // load list of maps, specify the \"id\" field\n    index.load(List.of(data), \"user\");\n\n    // fetch by \"id\"\n    Map\u003cString, Object\u003e john = index.fetch(\"john\");\n    ```\n\n## 🔍 Retrieval\n\nDefine queries and perform advanced searches over your indices, including the combination of vectors, metadata filters, and more.\n\n- **VectorQuery** - Flexible vector queries with customizable filters enabling semantic search:\n\n    ```java\n    import com.redis.vl.query.VectorQuery;\n\n    VectorQuery query = VectorQuery.builder()\n        .vector(new float[]{0.16f, -0.34f, 0.98f, 0.23f})\n        .field(\"embedding\")\n        .numResults(3)\n        .build();\n\n    // run the vector search query against the embedding field\n    List\u003cMap\u003cString, Object\u003e\u003e results = index.query(query);\n    ```\n\n    Incorporate complex metadata filters on your queries:\n\n    ```java\n    import com.redis.vl.query.filter.FilterQuery;\n\n    // define a tag match filter\n    FilterQuery tagFilter = FilterQuery.tag(\"user\", \"john\");\n\n    // update query definition\n    VectorQuery filteredQuery = query.toBuilder()\n        .withPreFilter(tagFilter.build())\n        .build();\n\n    // execute query\n    List\u003cMap\u003cString, Object\u003e\u003e results = index.query(filteredQuery);\n    ```\n\n- **HybridQuery** - Native hybrid search combining text and vector similarity using Redis 8.4+ `FT.HYBRID` command with built-in score fusion:\n\n    ```java\n    import com.redis.vl.query.HybridQuery;\n    import com.redis.vl.query.Filter;\n\n    // Native hybrid search with LINEAR combination (Redis 8.4+)\n    HybridQuery hybridQuery = HybridQuery.builder()\n        .text(\"machine learning algorithms\")\n        .textFieldName(\"description\")\n        .vector(queryVector)\n        .vectorFieldName(\"embedding\")\n        .filterExpression(Filter.tag(\"category\", \"AI\"))\n        .combinationMethod(HybridQuery.CombinationMethod.LINEAR)\n        .linearAlpha(0.3f)  // 30% text, 70% vector\n        .numResults(10)\n        .build();\n\n    List\u003cMap\u003cString, Object\u003e\u003e results = index.query(hybridQuery);\n    // Automatically falls back to AggregateHybridQuery on older Redis versions\n    ```\n\n- **AggregateHybridQuery** - Backward-compatible hybrid search using `FT.AGGREGATE` for Redis versions before 8.4:\n\n    ```java\n    import com.redis.vl.query.AggregateHybridQuery;\n\n    AggregateHybridQuery aggQuery = AggregateHybridQuery.builder()\n        .text(\"machine learning algorithms\")\n        .textFieldName(\"description\")\n        .vector(queryVector)\n        .vectorFieldName(\"embedding\")\n        .alpha(0.7f)  // 70% vector, 30% text\n        .numResults(10)\n        .build();\n\n    List\u003cMap\u003cString, Object\u003e\u003e results = index.query(aggQuery);\n    ```\n\n- **VectorRangeQuery** - Vector search within a defined range paired with customizable filters\n- **FilterQuery** - Standard search using filters and the full-text search\n- **CountQuery** - Count the number of indexed records given attributes\n\n\u003e Read more about building [advanced Redis queries](https://redis.github.io/redis-vl-java/redisvl/current/hybrid-queries.html).\n\n## 🔧 Utilities\n\n### Vectorizers\n\nIntegrate with popular embedding providers to greatly simplify the process of vectorizing unstructured data for your index and queries:\n\n- **LangChain4J** - Integration with LangChain4J embedding models\n  - OpenAI\n  - Cohere\n  - HuggingFace\n  - Ollama\n  - Vertex AI\n  - Azure OpenAI\n  - Mistral AI\n  - Voyage AI\n\n- **ONNX Models** - Local embedding models via ONNX Runtime\n  - Sentence Transformers (all-MiniLM-L6-v2, etc.)\n  - Custom ONNX models\n\n- **DJL (Deep Java Library)** - Face recognition and embeddings\n\n```java\nimport com.redis.vl.utils.vectorize.LangChain4JVectorizer;\nimport dev.langchain4j.model.cohere.CoherEmbeddingModel;\n\n// Using LangChain4J with Cohere\nCoherEmbeddingModel cohereModel = CoherEmbeddingModel.withApiKey(apiKey);\nLangChain4JVectorizer vectorizer = new LangChain4JVectorizer(cohereModel);\n\nfloat[] embedding = vectorizer.embed(\"What is the capital city of France?\");\n\nList\u003cfloat[]\u003e embeddings = vectorizer.embedBatch(\n    List.of(\n        \"my document chunk content\",\n        \"my other document chunk content\"\n    )\n);\n```\n\n```java\nimport com.redis.vl.utils.vectorize.SentenceTransformersVectorizer;\n\n// Using local ONNX model\nSentenceTransformersVectorizer vectorizer = new SentenceTransformersVectorizer(\"sentence-transformers/all-mpnet-base-v2\");\n\nfloat[] embedding = vectorizer.embed(\"What is the capital city of France?\");\n```\n\n\u003e Learn more about using [vectorizers](https://redis.github.io/redis-vl-java/redisvl/current/vectorizers.html) in your embedding workflows.\n\n### Rerankers\n\nIntegrate with popular reranking providers to improve the relevancy of the initial search results from Redis:\n\n- **Cohere Reranker** - Using Cohere's reranking API\n- **HuggingFace Cross-Encoder** - Local reranking with cross-encoder models\n\n```java\nimport com.redis.vl.utils.rerank.CohereReranker;\n\nCohereReranker reranker = new CohereReranker(apiKey);\n\nList\u003cMap\u003cString, Object\u003e\u003e reranked = reranker.rerank(\n    \"What is the capital of France?\",\n    results,\n    topK\n);\n```\n\n## 💫 Extensions\n\nRedisVL supports **Extensions** that implement interfaces exposing best practices and design patterns for working with LLM memory and agents.\n\n### LLM Semantic Caching\n\nIncrease application throughput and reduce the cost of using LLM models in production by leveraging previously generated knowledge with the `SemanticCache`.\n\n```java\nimport com.redis.vl.extensions.cache.llm.SemanticCache;\nimport com.redis.vl.extensions.cache.llm.CacheConfiguration;\n\n// init cache with TTL and semantic distance threshold\nCacheConfiguration config = CacheConfiguration.builder()\n    .name(\"llmcache\")\n    .ttl(360L)\n    .distanceThreshold(0.1)\n    .build();\n\nSemanticCache cache = new SemanticCache(config, jedis);\n\n// store user queries and LLM responses in the semantic cache\ncache.store(\n    \"What is the capital city of France?\",\n    \"Paris\"\n);\n\n// quickly check the cache with a slightly different prompt (before invoking an LLM)\nCacheResult result = cache.check(\"What is France's capital city?\");\nif (result.isHit()) {\n    System.out.println(result.getResponse());\n    // Output: Paris\n}\n```\n\n\u003e Learn more about [semantic caching](https://redis.github.io/redis-vl-java/redisvl/current/llmcache.html) for LLMs.\n\n### LLM Semantic Routing\n\nBuild fast decision models that run directly in Redis and route user queries to the nearest \"route\" or \"topic\".\n\n```java\nimport com.redis.vl.extensions.router.SemanticRouter;\nimport com.redis.vl.extensions.router.Route;\nimport com.redis.vl.utils.vectorize.SentenceTransformersVectorizer\n\nSentenceTransformersVectorizer vectorizer = new SentenceTransformersVectorizer(\"sentence-transformers/all-mpnet-base-v2\")\n\nList\u003cRoute\u003e routes = List.of(\n    Route.builder()\n        .name(\"greeting\")\n        .references(List.of(\"hello\", \"hi\"))\n        .metadata(Map.of(\"type\", \"greeting\"))\n        .distanceThreshold(0.3)\n        .build(),\n    Route.builder()\n        .name(\"farewell\")\n        .references(List.of(\"bye\", \"goodbye\"))\n        .metadata(Map.of(\"type\", \"farewell\"))\n        .distanceThreshold(0.3)\n        .build()\n);\n\n// build semantic router from routes\nSemanticRouter router = SemanticRouter.builder()\n    .name(\"topic-router\")\n    .vectorizer(vectorizer)\n    .routes(routes)\n    .jedis(jedis)\n    .build();\n\nRouteMatch match = router.route(\"Hi, good morning\");\nSystem.out.println(match.getName()); // Output: greeting\nSystem.out.println(match.getDistance()); // Output: 0.273891836405\n```\n\n\u003e Learn more about [semantic routing](https://redis.github.io/redis-vl-java/redisvl/current/semantic-router.html).\n\n## 🧪 Experimental: VCR Test System\n\nRedisVL includes an experimental VCR (Video Cassette Recorder) test system for recording and replaying LLM/embedding API calls. This enables:\n\n- **Deterministic tests** - Replay recorded responses for consistent results\n- **Cost reduction** - Avoid repeated API calls during test runs\n- **Speed improvement** - Local Redis playback is faster than API calls\n- **Offline testing** - Run tests without network access or API keys\n\n### Quick Start with JUnit 5\n\nThe simplest way to use VCR is with the declarative annotations:\n\n```java\nimport com.redis.vl.test.vcr.VCRMode;\nimport com.redis.vl.test.vcr.VCRModel;\nimport com.redis.vl.test.vcr.VCRTest;\n\n@VCRTest(mode = VCRMode.PLAYBACK_OR_RECORD)\nclass MyLLMTest {\n\n    // Models are automatically wrapped by VCR\n    @VCRModel(modelName = \"text-embedding-3-small\")\n    private EmbeddingModel embeddingModel = createEmbeddingModel();\n\n    @VCRModel\n    private ChatLanguageModel chatModel = createChatModel();\n\n    @Test\n    void testEmbedding() {\n        // First run: Records API response to Redis\n        // Subsequent runs: Replays from Redis cassette\n        Response\u003cEmbedding\u003e response = embeddingModel.embed(\"What is Redis?\");\n        assertNotNull(response.content());\n    }\n\n    @Test\n    void testChat() {\n        String response = chatModel.generate(\"Explain Redis in one sentence.\");\n        assertNotNull(response);\n    }\n}\n```\n\n### VCR Modes\n\n| Mode | Description | API Key Required |\n|------|-------------|------------------|\n| `PLAYBACK` | Only use recorded cassettes. Fails if missing. | No |\n| `PLAYBACK_OR_RECORD` | Use cassette if available, record if not. | Only for first run |\n| `RECORD` | Always call real API and record response. | Yes |\n| `OFF` | Bypass VCR, always call real API. | Yes |\n\n### Environment Variable Override\n\nOverride the VCR mode at runtime without changing code:\n\n```bash\n# Record new cassettes\nVCR_MODE=RECORD OPENAI_API_KEY=your-key ./gradlew test\n\n# Playback only (CI/CD, no API key needed)\nVCR_MODE=PLAYBACK ./gradlew test\n```\n\n### LangChain4J Integration\n\n```java\nimport com.redis.vl.test.vcr.VCREmbeddingModel;\nimport com.redis.vl.test.vcr.VCRChatModel;\nimport com.redis.vl.test.vcr.VCRMode;\n\n// Wrap any LangChain4J EmbeddingModel\nVCREmbeddingModel vcrEmbedding = new VCREmbeddingModel(openAiEmbeddingModel);\nvcrEmbedding.setMode(VCRMode.PLAYBACK_OR_RECORD);\nResponse\u003cEmbedding\u003e response = vcrEmbedding.embed(\"What is Redis?\");\n\n// Wrap any LangChain4J ChatLanguageModel\nVCRChatModel vcrChat = new VCRChatModel(openAiChatModel);\nvcrChat.setMode(VCRMode.PLAYBACK_OR_RECORD);\nString response = vcrChat.generate(\"What is Redis?\");\n```\n\n### Spring AI Integration\n\n```java\nimport com.redis.vl.test.vcr.VCRSpringAIEmbeddingModel;\nimport com.redis.vl.test.vcr.VCRSpringAIChatModel;\nimport com.redis.vl.test.vcr.VCRMode;\n\n// Wrap any Spring AI EmbeddingModel\nVCRSpringAIEmbeddingModel vcrEmbedding = new VCRSpringAIEmbeddingModel(openAiEmbeddingModel);\nvcrEmbedding.setMode(VCRMode.PLAYBACK_OR_RECORD);\nEmbeddingResponse response = vcrEmbedding.embedForResponse(List.of(\"What is Redis?\"));\n\n// Wrap any Spring AI ChatModel\nVCRSpringAIChatModel vcrChat = new VCRSpringAIChatModel(openAiChatModel);\nvcrChat.setMode(VCRMode.PLAYBACK_OR_RECORD);\nString response = vcrChat.call(\"What is Redis?\");\n```\n\n### How It Works\n\n1. **Container Management**: VCR starts a Redis container with persistence\n2. **Model Wrapping**: `@VCRModel` fields are wrapped with VCR proxies\n3. **Cassette Storage**: Responses stored as Redis JSON documents\n4. **Persistence**: Data saved to `src/test/resources/vcr-data/` via Redis AOF/RDB\n5. **Playback**: Subsequent runs load cassettes from persistent storage\n\n### Demo Projects\n\nComplete working examples are available:\n\n- **[LangChain4J VCR Demo](demos/langchain4j-vcr/)** - LangChain4J embedding and chat models\n- **[Spring AI VCR Demo](demos/spring-ai-vcr/)** - Spring AI embedding and chat models\n\nRun the demos without an API key (uses pre-recorded cassettes):\n\n```bash\n./gradlew :demos:langchain4j-vcr:test\n./gradlew :demos:spring-ai-vcr:test\n```\n\n\u003e Learn more about [VCR testing](https://redis.github.io/redis-vl-java/redisvl/current/vcr-testing.html).\n\n## 🚀 Why RedisVL?\n\nIn the age of GenAI, **vector databases** and **LLMs** are transforming information retrieval systems. With emerging and popular frameworks like [LangChain4J](https://github.com/langchain4j/langchain4j) and [Spring AI](https://spring.io/projects/spring-ai), innovation is rapid. Yet, many organizations face the challenge of delivering AI solutions **quickly** and at **scale**.\n\nEnter [Redis](https://redis.io) – a cornerstone of the NoSQL world, renowned for its versatile [data structures](https://redis.io/docs/data-types/) and [processing engines](https://redis.io/docs/interact/). Redis excels in real-time workloads like caching, session management, and search. It's also a powerhouse as a vector database for RAG, an LLM cache, and a chat session memory store for conversational AI.\n\nThe Redis Vector Library bridges the gap between the AI-native developer ecosystem and Redis's robust capabilities. With a lightweight, elegant, and intuitive interface, RedisVL makes it easy to leverage Redis's power. Built on the [Jedis](https://github.com/redis/jedis) client, RedisVL transforms Redis's features into a grammar perfectly aligned with the needs of today's AI/ML Engineers and Data Scientists.\n\n## 📚 Examples and Notebooks\n\nCheck out the [notebooks](notebooks/) directory for interactive Jupyter notebook examples:\n\n- [Getting Started](notebooks/01_getting_started.ipynb) - Introduction to RedisVL basics\n- [Hybrid Queries](notebooks/02_hybrid_queries.ipynb) - Combining vector and metadata search\n- [Advanced Queries](notebooks/11_advanced_queries.ipynb) - TextQuery, HybridQuery, and MultiVectorQuery\n- [LLM Cache](notebooks/03_llmcache.ipynb) - Semantic caching for LLMs\n- [Hash vs JSON Storage](notebooks/05_hash_vs_json.ipynb) - Storage type comparison\n- [Vectorizers](notebooks/06_vectorizers.ipynb) - Working with embedding models\n- [Rerankers](notebooks/07_rerankers.ipynb) - Improving search relevance\n\n### Running the Notebooks\n\nThe notebooks use Java kernel support via JJava. To run them:\n\n1. **Start the notebook environment:**\n\n   ```bash\n   cd notebooks\n   docker compose up -d\n   ```\n\n2. **Access Jupyter Lab:**\n   Navigate to [http://localhost:8888/](http://localhost:8888/)\n\n3. **Stop when done:**\n\n   ```bash\n   docker compose down\n   ```\n\n\u003e See the [notebooks README](notebooks/README.md) for more details.\n\n## 😁 Helpful Links\n\nFor additional help, check out the following resources:\n\n- [Getting Started Guide](https://redis.github.io/redis-vl-java/redisvl/current/getting-started.html)\n- [API Reference (Javadoc)](https://redis.github.io/redis-vl-java/redisvl/current/_attachments/javadoc/aggregate/index.html)\n- [Example Notebooks](notebooks/)\n- [Redis AI Recipes](https://github.com/redis-developer/redis-ai-resources)\n- [Official Redis Vector API Docs](https://redis.io/docs/interact/search-and-query/advanced-concepts/vectors/)\n\n## 🫱🏼‍🫲🏽 Contributing\n\nPlease help us by contributing PRs, opening GitHub issues for bugs or new feature ideas, improving documentation, or increasing test coverage. [Read more about how to contribute!](CONTRIBUTING.md)\n\n## Requirements\n\n- Java 17+\n- Redis 8.0+ (includes built-in search and vector capabilities)\n- For native `FT.HYBRID` support: Redis 8.4+\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## 🚧 Maintenance\n\nThis project is supported by [Redis, Inc](https://redis.io) on a good faith effort basis. To report bugs, request features, or receive assistance, please [file an issue](https://github.com/redis/redis-vl-java/issues).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fredis%2Fredis-vl-java","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fredis%2Fredis-vl-java","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fredis%2Fredis-vl-java/lists"}