Skip to content

SOLR-18267: Add flat vector index with no HNSW#4492

Open
adamjq wants to merge 2 commits into
apache:mainfrom
adamjq:SOLR-18267-add-flat-vector-index
Open

SOLR-18267: Add flat vector index with no HNSW#4492
adamjq wants to merge 2 commits into
apache:mainfrom
adamjq:SOLR-18267-add-flat-vector-index

Conversation

@adamjq
Copy link
Copy Markdown
Contributor

@adamjq adamjq commented Jun 1, 2026

https://issues.apache.org/jira/browse/SOLR-18267

Description

There are certain use cases, such as highly selective filters on large datasets, where it can be more efficient to perform a brute-force KNN search as a post-filter, instead of during ANN search.

Solr currently supports this use case with the vectorSimilarity Function and an fq, but still requires an HNSW graph to be built during indexing when using DenseVectorField, even if it's not used during search. The goal of this feature is to avoid paying the cost of HNSW graph construction and rebuilding ingestion when ANN search isn't used.

Solution

This PR introduces a new knnAlgorithm=flat option to DenseVectorField that uses Lucene99FlatVectorsFormat. This stores vectors in the index (.vec/.vemf files) without building the HNSW graph (.vex/.vem files).

Lucene99FlatVectorsFormat is not registered in Lucene's SPI, so this PR includes a wrapper class SolrFlatVectorFormat that delegates to Lucene99FlatVectorsFormat as a workaround. There are examples in other Lucene-based engines using a similar pattern to provide a flat vector format for exact KNN search that wraps Lucene99FlatVectorsFormat.

Limitations

This PR currently doesn't support:

  • knnAlgorithm=flat for quantized variants
  • search across flat dense vector fields using the knn query parser. Only vectorSimilarity is initially supported.

Both features could be shipped as follow-ups.

AI Disclosure: Claude was used to assist with this PR. All code has been reviewed and tested by me.

Tests

Unit tests for Dense Vector Fields and quantized variants.

Checklist

Please review the following and check all that apply:

  • I have reviewed the guidelines for How to Contribute and my code conforms to the standards described there to the best of my ability.
  • I have created a Jira issue and added the issue ID to my pull request title.
  • I have given Solr maintainers access to contribute to my PR branch. (optional but recommended, not available for branches on forks living under an organisation)
  • I have developed this patch against the main branch.
  • I have run ./gradlew check.
  • I have added tests for my changes.
  • I have added documentation for the Reference Guide
  • I have added a changelog entry for my change

@github-actions github-actions Bot added documentation Improvements or additions to documentation tests cat:search cat:schema labels Jun 1, 2026
@adamjq adamjq marked this pull request as ready for review June 1, 2026 20:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cat:schema cat:search documentation Improvements or additions to documentation tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant