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.
104 lines
2.8 KiB
Markdown
104 lines
2.8 KiB
Markdown
# 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
|