QuickSearchAction with pagination, relevance scoring, and highlight snippets
Per-field boosting via @QuickSearchField(weight=N)
Extensible IndexEventPublisher interface (default: synchronous, swap in RabbitMQ/Kafka)
Standard QBit SDLC setup (AGPL v3, checkstyle, CONTRIBUTING, SECURITY, CODE_OF_CONDUCT)
README rewritten following qbit-crm pattern
Key Architectural Decisions
IndexEventPublisher strategy pattern decouples write path from indexing
Singleton OpenSearch client with proper close() (no more per-operation client creation)
Lazy QuickSearchIndex row creation (first basepull/reindex run, not during produce)
QuickSearchQBitContext static holder for client/publisher (trade-off for QCodeReference)
Batched source queries with configurable sourceBatchSize (no more full-table OOM)
Test Plan
174 unit tests passing (mvn test)
mvn verify green (JaCoCo 70% instruction / 90% class)
Integration test with Testcontainers (skips gracefully without Docker)
Manual verification with a real QQQ application
## Summary
Complete clean-room rewrite of qbit-quick-search for a production-ready 1.0.0 release.
- **26 production classes, 21 test classes, 174 tests passing**
- Real-time indexing via post-insert/update/delete customizers through `IndexEventPublisher` strategy interface
- Basepull safety net for missed records during downtime
- OpenSearch client with explicit mappings, edge-ngram analyzer, batched operations, proper lifecycle
- `QuickSearchAction` with pagination, relevance scoring, and highlight snippets
- Per-field boosting via `@QuickSearchField(weight=N)`
- Extensible `IndexEventPublisher` interface (default: synchronous, swap in RabbitMQ/Kafka)
- Standard QBit SDLC setup (AGPL v3, checkstyle, CONTRIBUTING, SECURITY, CODE_OF_CONDUCT)
- README rewritten following qbit-crm pattern
## Key Architectural Decisions
- `IndexEventPublisher` strategy pattern decouples write path from indexing
- Singleton OpenSearch client with proper `close()` (no more per-operation client creation)
- Lazy `QuickSearchIndex` row creation (first basepull/reindex run, not during produce)
- `QuickSearchQBitContext` static holder for client/publisher (trade-off for QCodeReference)
- Batched source queries with configurable `sourceBatchSize` (no more full-table OOM)
## Test Plan
- [x] 174 unit tests passing (`mvn test`)
- [x] `mvn verify` green (JaCoCo 70% instruction / 90% class)
- [x] Integration test with Testcontainers (skips gracefully without Docker)
- [ ] Manual verification with a real QQQ application
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
Complete clean-room rewrite of qbit-quick-search for a production-ready 1.0.0 release.
IndexEventPublisherstrategy interfaceQuickSearchActionwith pagination, relevance scoring, and highlight snippets@QuickSearchField(weight=N)IndexEventPublisherinterface (default: synchronous, swap in RabbitMQ/Kafka)Key Architectural Decisions
IndexEventPublisherstrategy pattern decouples write path from indexingclose()(no more per-operation client creation)QuickSearchIndexrow creation (first basepull/reindex run, not during produce)QuickSearchQBitContextstatic holder for client/publisher (trade-off for QCodeReference)sourceBatchSize(no more full-table OOM)Test Plan
mvn test)mvn verifygreen (JaCoCo 70% instruction / 90% class)