This repository was archived by the owner on Sep 28, 2026. It is now read-only.
Repository navigation
NetApp Project Neo v4.0.2
·
63 commits
to main
since this release
NetApp Project Neo v4.0.2
What's New
Critical Search Performance Fix (20-42x Speedup)
Full-text search was bypassing PostgreSQL GIN indexes by using inline to_tsvector() calls instead of the pre-computed search_vector column. This caused sequential table scans on every search query.
- Before: Search queries took 12-25 seconds on ~100K files (sequential scan)
- After: Search queries return in under 1 second (GIN index scan)
- Root cause: Inline SQL in the router used
to_tsvector('english', content)which cannot use the GIN index on thesearch_vectorcolumn - Fix: Rewrote the search query to use
search_vector @@ plainto_tsquery(?), enabling proper index utilization
SQL Centralization & Code Quality
Moved 56 inline SQL queries from 6 API router files into 27 new shared Database methods. This prevents future performance regressions like the search bug by ensuring all SQL goes through reviewed, indexed-aware methods.
- Router code reduced by ~1,000 lines — Routers now call
db.list_files(),db.get_ner_stats(), etc. instead of constructing raw SQL - Eliminated repeated
dict(zip(...))conversions — Row-to-dict logic centralized in_row_to_file_dict()and_row_to_task_dict() - Fixed NER deletion correctness bug — NER cleanup now uses the direct
share_idcolumn onner_resultsinstead of an unnecessary subquery throughfile_metadata - Fixed NER stats entity aggregation —
get_ner_stats()now correctly aggregates entity types from the JSONBentitiescolumn usingjsonb_each()instead of referencing a non-existententity_typecolumn
Affected Endpoints
All endpoints maintain identical API contracts — no breaking changes:
/api/v1/files— File listing, filtering, and retrieval/api/v1/search— Full-text search (performance fix)/api/v1/ner/*— NER stats, results, and lifecycle management/api/v1/shares/*— Share management and crawl progress/api/v1/monitoring/*— System monitoring and worker status/api/v1/tasks/*— Background task management/api/v1/setup/factory-reset— Factory reset
Container Images
All images are available at ghcr.io/netapp. Pull with docker pull ghcr.io/netapp/<image>:4.0.2.
| Image | Platforms | Description |
|---|---|---|
netapp-neo-api:4.0.2 |
amd64, arm64 | REST API + MCP transport |
netapp-neo-worker:4.0.2 |
amd64, arm64 | Background processing |
netapp-neo-extractor:4.0.2 |
amd64, arm64 | Content extraction (CPU) |
netapp-neo-extractor-cuda:4.0.2 |
amd64, arm64 | Content extraction (NVIDIA GPU) |
netapp-neo-extractor-rocm:4.0.2 |
amd64 | Content extraction (AMD GPU) |
netapp-neo-ner:4.0.2 |
amd64, arm64 | Named Entity Recognition |
Quick Start
# Pull all CPU images
docker pull ghcr.io/netapp/netapp-neo-api:4.0.2
docker pull ghcr.io/netapp/netapp-neo-worker:4.0.2
docker pull ghcr.io/netapp/netapp-neo-extractor:4.0.2
docker pull ghcr.io/netapp/netapp-neo-ner:4.0.2
# For NVIDIA GPU acceleration, use the CUDA extractor variant instead
docker pull ghcr.io/netapp/netapp-neo-extractor-cuda:4.0.2Quality
- 45/45 end-to-end API tests passing (100% pass rate)
- 70/70 unit tests passing for all modified code
- Validated across S3, NFS, and SMB storage backends
- Tested with ~104K files across multiple shares