Skip to content

Add base64 encoded vector indexing support for knn_vector fields - #3350

Merged
navneet1v merged 1 commit into
opensearch-project:mainfrom
navneet1v:main
Jun 2, 2026
Merged

navneet1v merged 1 commit into
opensearch-project:mainfrom
navneet1v:main

Conversation

@navneet1v

@navneet1v navneet1v commented May 31, 2026 •

Copy link
Copy Markdown
Collaborator

Description

Vectors can now be indexed as base64-encoded strings in addition to JSON arrays. Float vectors use little-endian byte encoding (symmetric with the doc_values binary output format), while byte/binary vectors use raw byte encoding. This enables efficient bulk ingestion pipelines that avoid JSON array serialization overhead.

Some Benchmarking details added in the GH issue. #3322

Related Issues

Resolves #3322

Check List

  • New functionality includes testing.
  • New functionality has been documented.
  • API changes companion pull request created.
  • Commits are signed per the DCO using --signoff.
  • Public documentation issue/PR created.

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.

@github-actions

github-actions Bot commented May 31, 2026 •

Copy link
Copy Markdown

PR Reviewer Guide 🔍

(Review updated until commit 7ca2011)

Here are some key observations to aid the review process:

🧪 PR contains tests
🔒 No security concerns identified
✅ No TODO sections
🔀 No multiple PR themes
⚡ Recommended focus areas for review

Possible Issue

For float vectors, per-dimension processing and validation occur after decoding the entire base64 string. If perDimensionProcessor.process() or perDimensionValidator.validate() throw exceptions for any dimension, the entire operation fails after already allocating the full float array. This differs from the array parsing path where validation happens incrementally per element. For large vectors with invalid values late in the sequence, this wastes memory and processing time.

ByteBuffer.wrap(decoded).order(ByteOrder.LITTLE_ENDIAN).asFloatBuffer().get(array);
for (int idx = 0; idx < numFloats; idx++) {
    array[idx] = perDimensionProcessor.process(array[idx]);
    perDimensionValidator.validate(array[idx]);
}
return Optional.of(array);

@github-actions

github-actions Bot commented May 31, 2026 •

Copy link
Copy Markdown

PR Code Suggestions ✨

Latest suggestions up to 7ca2011

Explore these optional code suggestions:

CategorySuggestion                                                                                                                                    Impact
Possible issue
Fix binary vector dimension validation

The validateVectorDimension call for byte vectors uses decoded.length directly, but
for binary vectors it should validate against decoded.length * 8 since binary
dimension is measured in bits. This causes incorrect dimension validation for binary
data types when using base64 encoding.

src/main/java/org/opensearch/knn/index/mapper/KNNVectorFieldMapper.java [839-853]

 } else if (token == XContentParser.Token.VALUE_STRING) {
     final byte[] decoded;
     try {
         decoded = BASE64_DECODER.decode(context.parser().text());
     } catch (IllegalArgumentException e) {
         throw new IllegalArgumentException(
             String.format(Locale.ROOT, "Invalid base64 encoding for vector field [%s]: %s", name(), e.getMessage()),
             e
         );
     }
-    validateVectorDimension(dimension, decoded.length, dataType);
+    int actualDimension = (dataType == VectorDataType.BINARY) ? decoded.length * 8 : decoded.length;
+    validateVectorDimension(dimension, actualDimension, dataType);
     // Per-dimension validation is intentionally skipped: base64-decoded bytes are inherently
     // in [-128, 127] range, cannot be NaN/Inf, and have no decimal component — all checks
     // that validateByte() performs are satisfied by construction for raw byte values.
     return Optional.of(decoded);
Suggestion importance[1-10]: 10

__

Why: This is a critical bug. The code validates decoded.length against dimension for both BYTE and BINARY types, but BINARY dimension is in bits while decoded.length is in bytes. This causes incorrect validation for binary vectors, allowing wrong dimensions to pass or rejecting correct ones.

High
General
Ensure atomic per-dimension processing

The per-dimension processing and validation modifies the array in-place after
decoding. If perDimensionProcessor.process() throws an exception partway through,
the array will be left in a partially modified state, potentially causing
inconsistent data.

src/main/java/org/opensearch/knn/index/mapper/KNNVectorFieldMapper.java [910-918]

 int numFloats = decoded.length / Float.BYTES;
 validateVectorDimension(dimension, numFloats, vectorDataType);
 final float[] array = new float[numFloats];
 ByteBuffer.wrap(decoded).order(ByteOrder.LITTLE_ENDIAN).asFloatBuffer().get(array);
 for (int idx = 0; idx < numFloats; idx++) {
-    array[idx] = perDimensionProcessor.process(array[idx]);
-    perDimensionValidator.validate(array[idx]);
+    float processed = perDimensionProcessor.process(array[idx]);
+    perDimensionValidator.validate(processed);
+    array[idx] = processed;
 }
Suggestion importance[1-10]: 4

__

Why: While the suggestion improves code clarity by avoiding in-place modification before validation, the practical impact is minimal. If perDimensionProcessor.process() or perDimensionValidator.validate() throws an exception, the entire parsing operation fails and the partially modified array is discarded anyway.

Low

Previous suggestions

Suggestions up to commit eb230f5
CategorySuggestion                                                                                                                                    Impact
Possible issue
Apply per-dimension validation to byte vectors

The byte vector path directly returns the decoded bytes without applying
perDimensionProcessor or perDimensionValidator to each element, unlike the array
parsing path. This inconsistency means base64-encoded byte vectors bypass validation
and processing that array-encoded vectors receive, potentially allowing invalid
values through.

src/main/java/org/opensearch/knn/index/mapper/KNNVectorFieldMapper.java [839-850]

 } else if (token == XContentParser.Token.VALUE_STRING) {
     final byte[] decoded;
     try {
         decoded = BASE64_DECODER.decode(context.parser().text());
     } catch (IllegalArgumentException e) {
         throw new IllegalArgumentException(
             String.format(Locale.ROOT, "Invalid base64 encoding for vector field [%s]: %s", name(), e.getMessage()),
             e
         );
     }
     validateVectorDimension(dimension, decoded.length, dataType);
+    for (int i = 0; i < decoded.length; i++) {
+        float value = perDimensionProcessor.processByte(decoded[i]);
+        perDimensionValidator.validateByte(value);
+        decoded[i] = (byte) value;
+    }
     return Optional.of(decoded);
 }
Suggestion importance[1-10]: 8

__

Why: The suggestion correctly identifies that base64-encoded byte vectors bypass perDimensionProcessor and perDimensionValidator that are applied in the array parsing path (lines 831-838). This inconsistency could allow invalid values through, making this a significant correctness issue.

Medium
Suggestions up to commit 314aae6
CategorySuggestion                                                                                                                                    Impact
General
Apply per-dimension processing to bytes

The getBytesFromContext method returns raw decoded bytes without applying
perDimensionProcessor or perDimensionValidator to each byte element. For consistency
with the array parsing path (which processes each byte), consider validating and
processing each decoded byte individually to ensure uniform behavior across input
formats.

src/main/java/org/opensearch/knn/index/mapper/KNNVectorFieldMapper.java [839-850]

 } else if (token == XContentParser.Token.VALUE_STRING) {
     final byte[] decoded;
     try {
         decoded = BASE64_DECODER.decode(context.parser().text());
     } catch (IllegalArgumentException e) {
         throw new IllegalArgumentException(
             String.format(Locale.ROOT, "Invalid base64 encoding for vector field [%s]: %s", name(), e.getMessage()),
             e
         );
     }
     validateVectorDimension(dimension, decoded.length, dataType);
+    for (int i = 0; i < decoded.length; i++) {
+        float value = perDimensionProcessor.processByte(decoded[i]);
+        perDimensionValidator.validateByte(value);
+        decoded[i] = (byte) value;
+    }
     return Optional.of(decoded);
Suggestion importance[1-10]: 7

__

Why: The suggestion correctly identifies that the base64 path for bytes skips perDimensionProcessor and perDimensionValidator, while the array path applies them. This inconsistency could lead to different behavior between input formats. However, the impact depends on whether these processors/validators are actually configured for byte types in practice.

Medium
Suggestions up to commit bf699a5
CategorySuggestion                                                                                                                                    Impact
General
Add dimension context to validation errors

If perDimensionValidator.validate() throws an exception for any element, the
partially populated array is abandoned but the exception doesn't indicate which
dimension failed. Consider wrapping validation exceptions with the dimension index
to aid debugging of malformed base64 vectors.

src/main/java/org/opensearch/knn/index/mapper/KNNVectorFieldMapper.java [907-914]

 int numFloats = decoded.length / Float.BYTES;
 validateVectorDimension(dimension, numFloats, vectorDataType);
 final ByteBuffer buffer = ByteBuffer.wrap(decoded).order(ByteOrder.LITTLE_ENDIAN);
 final float[] array = new float[numFloats];
 for (int idx = 0; idx < numFloats; idx++) {
     array[idx] = perDimensionProcessor.process(buffer.getFloat());
-    perDimensionValidator.validate(array[idx]);
+    try {
+        perDimensionValidator.validate(array[idx]);
+    } catch (IllegalArgumentException e) {
+        throw new IllegalArgumentException(
+            String.format(Locale.ROOT, "Invalid value at dimension %d in base64 vector for field [%s]: %s", idx, name(), e.getMessage()),
+            e
+        );
+    }
 }
Suggestion importance[1-10]: 5

__

Why: This suggestion improves error messages by adding the dimension index when perDimensionValidator.validate() fails, which would help users identify which specific value in the base64-encoded vector is invalid. However, the impact is moderate as it only enhances debugging information rather than fixing a functional issue.

Low
Validate non-empty decoded byte array

The base64 decoding for byte vectors doesn't validate that the decoded byte array is
non-empty before returning. An empty base64 string would decode to an empty byte
array, bypassing dimension validation if dimension is 0. Add an explicit check to
ensure the decoded array has at least one element.

src/main/java/org/opensearch/knn/index/mapper/KNNVectorFieldMapper.java [839-850]

 } else if (token == XContentParser.Token.VALUE_STRING) {
     final byte[] decoded;
     try {
         decoded = BASE64_DECODER.decode(context.parser().text());
     } catch (IllegalArgumentException e) {
         throw new IllegalArgumentException(
             String.format(Locale.ROOT, "Invalid base64 encoding for vector field [%s]: %s", name(), e.getMessage()),
             e
         );
     }
+    if (decoded.length == 0) {
+        throw new IllegalArgumentException(
+            String.format(Locale.ROOT, "Base64 encoded vector for field [%s] cannot be empty", name())
+        );
+    }
     validateVectorDimension(dimension, decoded.length, dataType);
     return Optional.of(decoded);
 }
Suggestion importance[1-10]: 3

__

Why: While the suggestion correctly identifies that an empty base64 string could decode to an empty array, the validateVectorDimension method at line 849 should already handle this case by checking if decoded.length matches the expected dimension. The additional check is redundant unless dimension is 0, which would be a configuration issue rather than a runtime validation concern.

Low
Suggestions up to commit 0f2273e
CategorySuggestion                                                                                                                                    Impact
Possible issue
Advance parser before early return

The getBytesFromContext method returns early when processing base64 strings without
calling context.parser().nextToken(). This inconsistency with other branches may
cause parser state issues. Ensure the parser advances to the next token before
returning to maintain consistent parser state across all code paths.

src/main/java/org/opensearch/knn/index/mapper/KNNVectorFieldMapper.java [839-850]

 } else if (token == XContentParser.Token.VALUE_STRING) {
     final byte[] decoded;
     try {
         decoded = BASE64_DECODER.decode(context.parser().text());
     } catch (IllegalArgumentException e) {
         throw new IllegalArgumentException(
             String.format(Locale.ROOT, "Invalid base64 encoding for vector field [%s]: %s", name(), e.getMessage()),
             e
         );
     }
     validateVectorDimension(dimension, decoded.length, dataType);
+    context.parser().nextToken();
     return Optional.of(decoded);
 }
Suggestion importance[1-10]: 9

__

Why: The suggestion correctly identifies a critical parser state inconsistency. The VALUE_STRING branch returns early without calling context.parser().nextToken(), while other branches (lines 832, 838) do advance the parser. This can cause parser state corruption and subsequent parsing errors.

High
General
Validate before storing in array

Processing and validation occur after reading from the buffer, which means invalid
values are stored in the array before validation. If validation fails, the array
contains invalid data. Consider validating immediately after processing each float
value to fail fast and avoid storing invalid data.

src/main/java/org/opensearch/knn/index/mapper/KNNVectorFieldMapper.java [909-914]

 final ByteBuffer buffer = ByteBuffer.wrap(decoded).order(ByteOrder.LITTLE_ENDIAN);
 final float[] array = new float[numFloats];
 for (int idx = 0; idx < numFloats; idx++) {
-    array[idx] = perDimensionProcessor.process(buffer.getFloat());
-    perDimensionValidator.validate(array[idx]);
+    float value = perDimensionProcessor.process(buffer.getFloat());
+    perDimensionValidator.validate(value);
+    array[idx] = value;
 }
Suggestion importance[1-10]: 3

__

Why: While the suggestion is technically correct about the order of operations, the practical impact is minimal. The validation will still throw an exception before the array is returned, so no invalid data escapes the method. The improvement is primarily stylistic for fail-fast behavior.

Low
Suggestions up to commit c9ce3b7
CategorySuggestion                                                                                                                                    Impact
Possible issue
Handle invalid base64 decoding errors

Add error handling for invalid base64 input to prevent IllegalArgumentException from
propagating uncaught. Wrap the decode operation in a try-catch block and throw a
more descriptive exception that includes the field name and parsing context.

src/main/java/org/opensearch/knn/index/mapper/KNNVectorFieldMapper.java [839-843]

 } else if (token == XContentParser.Token.VALUE_STRING) {
-    final byte[] decoded = BASE64_DECODER.decode(context.parser().text());
+    final byte[] decoded;
+    try {
+        decoded = BASE64_DECODER.decode(context.parser().text());
+    } catch (IllegalArgumentException e) {
+        throw new IllegalArgumentException(
+            String.format(Locale.ROOT, "Invalid base64 encoding for field [%s]", name()),
+            e
+        );
+    }
     validateVectorDimension(dimension, decoded.length, dataType);
     // Raw decoded bytes are inherently valid: in [-128, 127], no NaN/Inf/decimal possible
     return Optional.of(decoded);
Suggestion importance[1-10]: 7

__

Why: The suggestion correctly identifies that BASE64_DECODER.decode() can throw IllegalArgumentException for invalid base64 input. Adding a try-catch block with a more descriptive error message that includes the field name improves error handling and debugging. However, this is a defensive improvement rather than fixing a critical bug, as the exception would still be caught and reported at a higher level.

Medium

@navneet1v navneet1v added the v3.7.0 Issues targeting release v3.7.0 label May 31, 2026
@github-actions

Copy link
Copy Markdown

Persistent review updated to latest commit c9ce3b7

@codecov

codecov Bot commented May 31, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 83.79%. Comparing base (9b030f4) to head (7ca2011).

Additional details and impacted files
@@             Coverage Diff              @@
##               main    #3350      +/-   ##
============================================
- Coverage     83.87%   83.79%   -0.08%     
- Complexity     4351     4352       +1     
============================================
  Files           452      452              
  Lines         15715    15744      +29     
  Branches       2046     2050       +4     
============================================
+ Hits          13181    13193      +12     
- Misses         1745     1767      +22     
+ Partials        789      784       -5     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@github-actions

Copy link
Copy Markdown

Persistent review updated to latest commit 0f2273e

@github-actions

github-actions Bot commented Jun 1, 2026

Copy link
Copy Markdown

Persistent review updated to latest commit bf699a5

@navneet1v navneet1v removed the v3.7.0 Issues targeting release v3.7.0 label Jun 1, 2026
@navneet1v navneet1v added the Enhancements Increases software capabilities beyond original client specifications label Jun 1, 2026
@github-actions

github-actions Bot commented Jun 1, 2026

Copy link
Copy Markdown

Persistent review updated to latest commit 314aae6

@github-actions

github-actions Bot commented Jun 1, 2026

Copy link
Copy Markdown

Persistent review updated to latest commit eb230f5

Vectors can now be indexed as base64-encoded strings in addition to JSON
arrays. Float vectors use little-endian byte encoding (symmetric with
the doc_values binary output format), while byte/binary vectors use raw
byte encoding. This enables efficient bulk ingestion pipelines that
avoid JSON array serialization overhead.

Signed-off-by: Navneet Verma <navneev@amazon.com>
@github-actions

github-actions Bot commented Jun 1, 2026

Copy link
Copy Markdown

Persistent review updated to latest commit 7ca2011

@navneet1v
navneet1v merged commit fd55c5c into opensearch-project:main Jun 2, 2026
47 checks passed
naveentatikonda pushed a commit that referenced this pull request Jun 18, 2026
* Enhance unit test coverage for 32x defaults

Signed-off-by: Kunal Kotwani <kkotwani@amazon.com>

* Add BwC test coverage (#3329)

Signed-off-by: Kunal Kotwani <kkotwani@amazon.com>

* Add base64 binary encoding as default format for knn_vector docvalue_fields (#3324)

Signed-off-by: Navneet Verma <navneev@amazon.com>

* Add issues write permission to untriaged label workflow (#3332)

Signed-off-by: shreyah963 <shreyab963@gmail.com>

* Fix score to radius conversion for IP with faiss (#3336)

Signed-off-by: Kunal Kotwani <kkotwani@amazon.com>
Co-authored-by: Tejas Shah <shatejas@amazon.com>

* Add ci.opensearch.org maven2 mirror to avoid throttling (#3345)

Signed-off-by: Sayali Gaikawad <gaiksaya@amazon.com>

* [AUTO] Add release notes for 3.7.0 (#3342)

Signed-off-by: opensearch-ci-bot <opensearch-infra@amazon.com>

* Fix derived source for mixed-case vector fields (#3313)

* Fix derived source for mixed-case vector fields

Signed-off-by: Wonjae Lee <wonjae.lee@dremio.com>

* Add BWC coverage for derived source field casing

Signed-off-by: Wonjae Lee <wonjae.lee@dremio.com>

* Add changelog entry for mixed-case derived source fix

Signed-off-by: Wonjae Lee <wonjae.lee@dremio.com>

* Handle case-insensitive conflicts by preferring vector field

Signed-off-by: Wonjae Lee <wonjae.lee@dremio.com>

* Avoid stream wrappers for derived field lookup

Signed-off-by: Wonjae Lee <wonjae.lee@dremio.com>

* Handle ambiguous case-insensitive matches without vector hints

Signed-off-by: Wonjae Lee <wonjae.lee@dremio.com>

* Update src/main/java/org/opensearch/knn/index/codec/KNN10010Codec/KNN10010DerivedSourceStoredFieldsFormat.java

Co-authored-by: Tejas Shah <shatejas@amazon.com>
Signed-off-by: Wonjae Lee <38933452+leewjae@users.noreply.github.com>

* Apply spotless formatting for derived source field resolution

Signed-off-by: Wonjae Lee <wonjae.lee@dremio.com>

* Avoid guessing when case-insensitive matches lack vector hints

Signed-off-by: Wonjae Lee <wonjae.lee@dremio.com>

* Simplify case-insensitive derived field matching

Signed-off-by: Wonjae Lee <wonjae.lee@dremio.com>

* Trigger CI rerun for BWC investigation

Signed-off-by: Wonjae Lee <wonjae.lee@dremio.com>

* Add native engine field info coverage

Signed-off-by: Wonjae Lee <wonjae.lee@dremio.com>

---------

Signed-off-by: Wonjae Lee <wonjae.lee@dremio.com>
Signed-off-by: Wonjae Lee <38933452+leewjae@users.noreply.github.com>
Signed-off-by: Tejas Shah <shatejas@amazon.com>
Co-authored-by: Tejas Shah <shatejas@amazon.com>
Co-authored-by: Navneet Verma <navneev@amazon.com>

* Fixes RescoreParser to pass the rescore flag (#3343)

* Fixes RescoreParser to pass the rescore flag

For multinode or coordinator-data node setup, rescore set to false is
not passed through streams. This causes rescoring to execute even when
its not disabled explicitly by user

Signed-off-by: Tejas Shah <shatejas@amazon.com>

* Updates Changelogs, improves code cov

Signed-off-by: Tejas Shah <shatejas@amazon.com>

* Makes the coordinator port dynamic

Signed-off-by: Tejas Shah <shatejas@amazon.com>

* Adds BWC test for mode and compression

Signed-off-by: Tejas Shah <shatejas@amazon.com>

* Does not create compressed indices before 2.18

Signed-off-by: Tejas Shah <shatejas@amazon.com>

* Fixes bwc

Signed-off-by: Tejas Shah <shatejas@amazon.com>

---------

Signed-off-by: Tejas Shah <shatejas@amazon.com>

* Merge rescore-radial-quantized feature branch to main (#3347)

* Rescoring after radial search on quantized index. [Task 1 - 4] (#3300)

* Bumped gradle to 9.4.1 and jacoco to 0.8.14 (#3308)

Signed-off-by: Andrew Klepchick <aklepchi@amazon.com>

* Use KNN1040ScalarQuantizedVectorsFormat for Faiss SQ flat format (#3302)

The Faiss SQ format was using Lucene's Lucene104ScalarQuantizedVectorsFormat
directly, which lacks the prefetch-enabled raw vector reader that
KNN1040ScalarQuantizedVectorsFormat provides. This meant exact search
rescoring was missing I/O prefetch during graph traversal.

Changes:
- Switch faissSqFlatFormat from Lucene104ScalarQuantizedVectorsFormat to
  KNN1040ScalarQuantizedVectorsFormat in Faiss1040ScalarQuantizedKnnVectorsFormat
- Add @VisibleForTesting getFlatVectorsReader() to
  Faiss1040ScalarQuantizedKnnVectorsReader to replace reflection in tests
- Add testGetRandomVectorScorer_returnsPrefetchableScorer in
  KNN1040ScalarQuantizedVectorsFormatTests verifying the scorer is
  PrefetchableRandomVectorScorer via a real write/read cycle
- Replace reflection with getter in
  Faiss1040ScalarQuantizedKnnVectorsFormatTests.testFieldsReader_thenWrapsFlatReaderWithPrefetchSupport

Signed-off-by: Vijayan Balasubramanian <balasvij@amazon.com>

* Allow minScore, maxDistance for 32x SQ index.

Signed-off-by: Dooyong Kim <kdooyong@amazon.com>

Pass compression and quantization config to RNN query builder.

Signed-off-by: Dooyong Kim <kdooyong@amazon.com>

Added RescoreRadialSearchQuery.

Signed-off-by: Dooyong Kim <kdooyong@amazon.com>

Wiring `RescoreRadialSearchQuery` wrapper in `RNNQueryFactory`

Signed-off-by: Dooyong Kim <kdooyong@amazon.com>

---------

Signed-off-by: Andrew Klepchick <aklepchi@amazon.com>
Signed-off-by: Vijayan Balasubramanian <balasvij@amazon.com>
Signed-off-by: Dooyong Kim <kdooyong@amazon.com>
Co-authored-by: Andrew Klepchick <aklepchi@amazon.com>
Co-authored-by: Vijayan Balasubramanian <balasvij@amazon.com>

* Rescore radial search quantized complete (#3337)

* Added exact search logic after radial.

Signed-off-by: Dooyong Kim <kdooyong@amazon.com>

* Adding 2nd rescoring after radial search on quantized index.

Signed-off-by: Dooyong Kim <kdooyong@amazon.com>

---------

Signed-off-by: Dooyong Kim <kdooyong@amazon.com>

* Update changelog

Signed-off-by: Dooyong Kim <kdooyong@amazon.com>

---------

Signed-off-by: Andrew Klepchick <aklepchi@amazon.com>
Signed-off-by: Vijayan Balasubramanian <balasvij@amazon.com>
Signed-off-by: Dooyong Kim <kdooyong@amazon.com>
Co-authored-by: Andrew Klepchick <aklepchi@amazon.com>
Co-authored-by: Vijayan Balasubramanian <balasvij@amazon.com>

* Add support for binary and byte field support in doc_values (#3340)

Signed-off-by: Navneet Verma <navneev@amazon.com>

* Pin GitHub Actions to commit SHAs (#3339)

Signed-off-by: Divya Madala <divyaasm@amazon.com>
Co-authored-by: Tejas Shah <shatejas@amazon.com>

* Turn off ACORN for MOS (#3346)

Signed-off-by: Andrew Klepchick <aklepchi@amazon.com>

* Add base64 encoded vector indexing support for knn_vector fields (#3350)

Vectors can now be indexed as base64-encoded strings in addition to JSON
arrays. Float vectors use little-endian byte encoding (symmetric with
the doc_values binary output format), while byte/binary vectors use raw
byte encoding. This enables efficient bulk ingestion pipelines that
avoid JSON array serialization overhead.

Signed-off-by: Navneet Verma <navneev@amazon.com>

* Made MemoryOptimizedSearchWarmup skip MemoryOptimizedSearchOldIndicesNotSupportedException. (#3344)

Signed-off-by: Dooyong Kim <kdooyong@amazon.com>
Signed-off-by: Doo Yong Kim <kdooyong@amazon.com>

* Integrated proper ef_search functionality into MOS and Lucene with oversample_factor (#3331)

* Check to see if Lucene's search budget has exhausted when deciding to exact search (#3354)

* Update opensearch-build workflow references from commit SHA to main (#3363)

Signed-off-by: Divya Madala <divyaasm@amazon.com>

* Pinned the commit for tj-actions/changed-files for version v47.0.0 (#3367)

Signed-off-by: Navneet Verma <navneev@amazon.com>

---------

Signed-off-by: Kunal Kotwani <kkotwani@amazon.com>
Signed-off-by: Navneet Verma <navneev@amazon.com>
Signed-off-by: shreyah963 <shreyab963@gmail.com>
Signed-off-by: Sayali Gaikawad <gaiksaya@amazon.com>
Signed-off-by: opensearch-ci-bot <opensearch-infra@amazon.com>
Signed-off-by: Wonjae Lee <wonjae.lee@dremio.com>
Signed-off-by: Wonjae Lee <38933452+leewjae@users.noreply.github.com>
Signed-off-by: Tejas Shah <shatejas@amazon.com>
Signed-off-by: Andrew Klepchick <aklepchi@amazon.com>
Signed-off-by: Vijayan Balasubramanian <balasvij@amazon.com>
Signed-off-by: Dooyong Kim <kdooyong@amazon.com>
Signed-off-by: Divya Madala <divyaasm@amazon.com>
Signed-off-by: Doo Yong Kim <kdooyong@amazon.com>
Co-authored-by: Navneet Verma <navneev@amazon.com>
Co-authored-by: Shreya Bhatta <shreyab963@gmail.com>
Co-authored-by: Tejas Shah <shatejas@amazon.com>
Co-authored-by: Sayali Gaikawad <gaiksaya@amazon.com>
Co-authored-by: opensearch-ci <83309141+opensearch-ci-bot@users.noreply.github.com>
Co-authored-by: Wonjae Lee <38933452+leewjae@users.noreply.github.com>
Co-authored-by: Doo Yong Kim <kdooyong@amazon.com>
Co-authored-by: Andrew Klepchick <aklepchi@amazon.com>
Co-authored-by: Vijayan Balasubramanian <balasvij@amazon.com>
Co-authored-by: Divya Madala <113469545+Divyaasm@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Enhancements Increases software capabilities beyond original client specifications

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FEATURE] Use Base64 encoded strings during vector ingestion

3 participants