Skip to content
This repository was archived by the owner on Sep 28, 2026. It is now read-only.

NetApp Project Neo v4.0.2

Choose a tag to compare

@kirkryan kirkryan released this 09 Mar 23:07
· 63 commits to main since this release
587f4e9

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 the search_vector column
  • 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_id column on ner_results instead of an unnecessary subquery through file_metadata
  • Fixed NER stats entity aggregation — get_ner_stats() now correctly aggregates entity types from the JSONB entities column using jsonb_each() instead of referencing a non-existent entity_type column

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.2

Quality

  • 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