Vector Store Release September 22, 2026 • 6 min read

Lightweight Hybrid Search & Dense Vector kNN: Announcing the Luxir Output Connector

We are thrilled to announce the official release of the Luxir Output Connector (oc-luxir-output-connector)! OpenCrawling now natively streams enterprise documents and vector embeddings into Luxir the modern, lightweight search engine designed for high performance, dynamic typing and developer ergonomics.


01. What is Luxir and Why Luxir for Enterprise AI?

Luxir is an open-source, lightweight search engine built from the ground up to provide high-speed full-text indexing, dense vector kNN similarity search, and hybrid ranking using Reciprocal Rank Fusion (RRF). Unlike legacy search clusters that require complex JVM orchestrations or heavy multi-container topologies, Luxir runs as a sleek, low-footprint single process with native JSON REST APIs over HTTP on port 9400.

In enterprise Retrieval-Augmented Generation (RAG) pipelines, simplicity, fast start times and zero client footprint are critical. Luxir brings a refreshingly modern approach with dynamic field typing conventions and native vector support, making it an ideal choice for both local AI development and high-throughput production workloads.

đź’ˇ

Zero External Client Footprint: oc-luxir-output-connector uses Java 25's standard java.net.http.HttpClient to communicate directly with Luxir's HTTP/1.1 and JSON endpoints, avoiding dependency sprawl and preventing classpath conflicts in decoupled microservice deployments.

02. End-to-End Pipeline Architecture

The Luxir Output Connector integrates seamlessly into OpenCrawling's event-driven, decoupled microservice pipeline:

Decoupled Ingestion Pipeline → Luxir Collection
Repository Crawlers (Filesystem, ACS, Iceberg, BPMN)
→
Kafka (opencrawling-embedded)
→
LuxirStoreWriterConsumer (oc-luxir-output-connector)
→
Luxir Collection ('opencrawling') on :9400

Once document chunks are converted to high-dimensional embeddings by oc-embedding-consumer (powered by Spring AI and Ollama's mxbai-embed-large), they are published to the opencrawling-embedded Kafka topic. The LuxirStoreWriterConsumer processes these messages in batches and indexes them directly into Luxir via its batch /_update REST endpoint.

03. Dynamic Schema Conventions & Auto-Provisioning

Luxir features dynamic schema type inference based on field name suffix conventions:

To ensure optimal vector similarity search, OpenCrawling includes LuxirCollectionInitializer. Upon startup, it automatically provisions the collection and declares explicit vector field properties using Luxir's _schema endpoint:

POST /collections/opencrawling/_schema
{
  "fields": {
    "embedding_v": {
      "type": "vector",
      "dims": 1024,
      "metric": "cosine"
    },
    "passages_vs": {
      "type": "vector",
      "dims": 1024,
      "metric": "cosine",
      "multi": true
    }
  }
}

04. Zero-Trust Security ACLs & OIS v1.1 Tombstone Lifecycle

In accordance with the Open Ingestion Standard (OIS), every document chunk indexed into Luxir carries granular enterprise security tokens. Access Control Lists are mapped into dynamic string array fields:

Furthermore, when an upstream repository document is deleted, OpenCrawling emits an OIS tombstone message (action: DELETE). The LuxirStoreWriterConsumer processes this tombstone by invoking Luxir's native delete_ids batch command, ensuring that deleted knowledge is immediately and permanently purged from downstream RAG retrieval indexes:

POST /collections/opencrawling/_update
{
  "delete_ids": ["doc-001_chunk_0"],
  "commit": {}
}

05. Configuration Properties

The Luxir Output Connector is configured via standard Spring Boot properties prefixed with spring.opencrawling.output.luxir.*:

Property Default Description
spring.opencrawling.output.type luxir Activates Luxir as the active output destination
spring.opencrawling.output.luxir.endpoint http://localhost:9400 Base HTTP endpoint for Luxir instance
spring.opencrawling.output.luxir.collection opencrawling Target Luxir collection name
spring.opencrawling.output.luxir.vector-field embedding_v Vector field name matching _v suffix convention
spring.opencrawling.output.luxir.dimensions 1024 Dense vector dimension (aligned with mxbai-embed-large)
spring.opencrawling.output.luxir.similarity cosine Vector similarity function: cosine, l2, or ip
spring.opencrawling.output.luxir.auto-commit true Whether to automatically commit document updates
spring.opencrawling.output.luxir.commit-within-ms 1000 Soft-commit latency window in milliseconds
spring.opencrawling.output.luxir.timeout-seconds 30 HTTP socket and connection timeout in seconds

06. Executing Full-Text & Dense Vector Queries

Querying indexed content in Luxir is fast and intuitive using JSON payloads over HTTP POST:

1. Document Count

curl -s -X POST "http://localhost:9400/collections/opencrawling/_search" \
     -H "Content-Type: application/json" \
     -d '{"query": "*:*", "get_number": true}' | jq .

2. Full-Text BM25 Search

curl -s -X POST "http://localhost:9400/collections/opencrawling/_search" \
     -H "Content-Type: application/json" \
     -d '{"query": "text_t:OpenCrawling"}' | jq .

3. 1024-Dimension Dense Vector kNN Search

curl -s -X POST "http://localhost:9400/collections/opencrawling/_search" \
     -H "Content-Type: application/json" \
     -d '{
       "query": {
         "knn": {
           "field": "embedding_v",
           "query": [0.0123, -0.0456, 0.0891, ...],
           "k": 5
         }
       }
     }' | jq .

07. Admin UI & Real-Time Diagnostics

The OpenCrawling Admin UI (oc-admin-ui) fully supports the Luxir connector out-of-the-box. Administrators can select Luxir Hybrid Search Store from the output connector dropdown, configure collection endpoints, and click Check Connection to trigger dynamic connectivity testing through ConnectorCheckerService.

08. Automated Decoupled Integration Testing

OpenCrawling ships with a complete Docker Compose decoupled definition (docker-compose-decoupled-with-luxir.yml) and an automated test suite. The script sets up the full stack—Luxir, Kafka, Zookeeper, Redis, Ollama, and OpenCrawling microservices—and verifies the entire pipeline:

# Run end-to-end integration test
./scripts/test-luxir-decoupled.sh
🍎

Apple Silicon & ARM64 Support: The Luxir Docker image (luxir/luxir:v0.1.0) is compiled for linux/amd64. The OpenCrawling compose configuration specifies platform: linux/amd64, enabling seamless Rosetta 2 / QEMU binary emulation on Apple Silicon macOS hosts.

Ready to Experience OpenCrawling with Luxir?

Try the live interactive simulator, inspect the source code, or read our complete Wiki documentation.