docs: add README for workspace and all 7 crates
Root README covers architecture, Rust builder API quick start, YAML pipeline quick start, provider table, deno executor overview, feature flags, and testing instructions. Per-crate READMEs follow consistent structure: one-liner, what it does, quick start code example, API reference, configuration, testing, license. Engineering-confident tone throughout.
This commit is contained in:
103
wfe-opensearch/README.md
Normal file
103
wfe-opensearch/README.md
Normal file
@@ -0,0 +1,103 @@
|
||||
# wfe-opensearch
|
||||
|
||||
OpenSearch search index provider for the WFE workflow engine.
|
||||
|
||||
## What it does
|
||||
|
||||
Implements the `SearchIndex` trait backed by OpenSearch. Indexes workflow instances as documents and supports full-text search with bool queries, term filters (status, reference), date range filters, and pagination. The index mapping is created automatically on `start()` if it does not already exist.
|
||||
|
||||
## Quick start
|
||||
|
||||
```rust
|
||||
use wfe_opensearch::OpenSearchIndex;
|
||||
|
||||
let index = OpenSearchIndex::new(
|
||||
"http://localhost:9200",
|
||||
"wfe_workflows",
|
||||
)?;
|
||||
|
||||
// Create the index mapping (idempotent)
|
||||
index.start().await?;
|
||||
|
||||
// Index a workflow
|
||||
index.index_workflow(&workflow_instance).await?;
|
||||
|
||||
// Search with filters
|
||||
use wfe_core::traits::search::{SearchFilter, SearchIndex};
|
||||
|
||||
let page = index.search(
|
||||
"deploy", // free-text query
|
||||
0, // skip
|
||||
20, // take
|
||||
&[SearchFilter::Status(WorkflowStatus::Complete)],
|
||||
).await?;
|
||||
```
|
||||
|
||||
## API
|
||||
|
||||
| Type | Trait |
|
||||
|------|-------|
|
||||
| `OpenSearchIndex` | `SearchIndex` |
|
||||
|
||||
Key methods:
|
||||
|
||||
| Method | Description |
|
||||
|--------|-------------|
|
||||
| `new(url, index_name)` | Create a provider pointing at an OpenSearch instance |
|
||||
| `start()` | Create the index with mappings if it does not exist |
|
||||
| `index_workflow(instance)` | Index or update a workflow document |
|
||||
| `search(terms, skip, take, filters)` | Bool query with filters, returns `Page<WorkflowSearchResult>` |
|
||||
| `client()` | Access the underlying `OpenSearch` client |
|
||||
| `index_name()` | Get the configured index name |
|
||||
|
||||
### Search filters
|
||||
|
||||
| Filter | OpenSearch mapping |
|
||||
|--------|--------------------|
|
||||
| `SearchFilter::Status(status)` | `term` query on `status` (keyword) |
|
||||
| `SearchFilter::Reference(ref)` | `term` query on `reference` (keyword) |
|
||||
| `SearchFilter::DateRange { field, before, after }` | `range` query on date fields |
|
||||
|
||||
Free-text terms run a `multi_match` across `description`, `reference`, and `workflow_definition_id`.
|
||||
|
||||
## Index mapping
|
||||
|
||||
The index uses the following field types:
|
||||
|
||||
| Field | Type |
|
||||
|-------|------|
|
||||
| `id` | keyword |
|
||||
| `workflow_definition_id` | keyword |
|
||||
| `version` | integer |
|
||||
| `status` | keyword |
|
||||
| `reference` | keyword |
|
||||
| `description` | text |
|
||||
| `data` | object (disabled -- stored but not indexed) |
|
||||
| `create_time` | date |
|
||||
| `complete_time` | date |
|
||||
|
||||
## Configuration
|
||||
|
||||
Constructor takes two arguments:
|
||||
|
||||
| Parameter | Example | Description |
|
||||
|-----------|---------|-------------|
|
||||
| `url` | `http://localhost:9200` | OpenSearch server URL |
|
||||
| `index_name` | `wfe_workflows` | Index name for workflow documents |
|
||||
|
||||
Security plugin is not required. For local development, run OpenSearch with `DISABLE_SECURITY_PLUGIN=true`.
|
||||
|
||||
## Testing
|
||||
|
||||
Requires a running OpenSearch instance. Use the project docker-compose:
|
||||
|
||||
```sh
|
||||
docker compose up -d opensearch
|
||||
cargo test -p wfe-opensearch
|
||||
```
|
||||
|
||||
Default test connection: `http://localhost:9200`
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
Reference in New Issue
Block a user