Skip to content

feat: add HFresh vector index type support (#285)#289

Open
mpartipilo wants to merge 1 commit intofeature/cancel-backup-restorefrom
feature/hfresh-vector-index
Open

feat: add HFresh vector index type support (#285)#289
mpartipilo wants to merge 1 commit intofeature/cancel-backup-restorefrom
feature/hfresh-vector-index

Conversation

@mpartipilo
Copy link
Collaborator

Summary

  • Adds VectorIndex.HFresh as a first-class vector index configuration type, providing feature parity with the Python client (PR #1848)
  • Implements the full serialization layer: HFreshDto, bidirectional ToHFresh()/ToDto() mappings, factory dispatch, and SerializeHFresh/DeserializeHFresh helpers
  • Updates PublicAPI.Unshipped.txt with all 24 new public symbols (Roslyn RS0016 clean)
  • Adds 3 unit tests covering JSON deserialization, full roundtrip, and RQ quantizer value preservation

HFresh Parameters

Property JSON key Notes
MaxPostingSizeKb maxPostingSizeKB System-computed when null
Replicas replicas Server default: 4
SearchProbe searchProbe Server default: 64
Distance distance Reuses VectorDistance enum
Quantizer rq Only RQ supported (throws on other types)
MultiVector multivector Same shape as HNSW

Test Plan

  • dotnet build -warnaserror — 0 errors, 0 warnings
  • Unit tests: 734 passed, 0 failed
  • Integration tests against Weaviate 1.36+ (requires live server)

Closes #285

🤖 Generated with Claude Code

Add VectorIndex.HFresh as a first-class vector index configuration type,
matching feature parity with the Python client (PR weaviate-python-client#1848).

HFresh is an inverted-list-based ANN index introduced in Weaviate 1.36.
Vectors are distributed across posting lists (Replicas) and queries probe
SearchProbe lists for candidates. Supports RQ quantization and multi-vector
configurations. MaxPostingSizeKb can be left unset for server-computed sizing.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Copy link

@orca-security-eu orca-security-eu bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Orca Security Scan Summary

Status Check Issues by priority
Passed Passed Secrets high 0   medium 0   low 0   info 0 View in Orca

@github-actions
Copy link

Summary - Weaviate C# Client Coverage

Summary
Generated on: 02/27/2026 - 00:08:17
Coverage date: 02/26/2026 - 23:59:29 - 02/27/2026 - 00:07:26
Parser: MultiReport (67x Cobertura)
Assemblies: 2
Classes: 319
Files: 205
Line coverage: 62.3% (12416 of 19925)
Covered lines: 12416
Uncovered lines: 7509
Coverable lines: 19925
Total lines: 52584
Branch coverage: 53.3% (2916 of 5461)
Covered branches: 2916
Total branches: 5461
Method coverage: Feature is only available for sponsors

Coverage

Weaviate.Client - 61%
Name Line Branch
Weaviate.Client 61% 52.3%
Weaviate.Client.AggregateClient 51.3% 31.8%
Weaviate.Client.AggregateClientHybridExtensions 0%
Weaviate.Client.AliasClient 100% 62.5%
Weaviate.Client.ApiKeyTokenService 100% 50%
Weaviate.Client.Auth 9.5%
Weaviate.Client.AuthenticatedHttpHandler 71.7% 60%
Weaviate.Client.BackupClient 87.1% 45.6%
Weaviate.Client.BaseCollectionClient 0% 0%
Weaviate.Client.Cache.SchemaCache 69.4% 60%
Weaviate.Client.ClientConfiguration 100% 100%
Weaviate.Client.ClusterClient 86.2% 64.2%
Weaviate.Client.CollectionClient 98.7% 87.5%
Weaviate.Client.CollectionClientExtensions 100% 100%
Weaviate.Client.CollectionConfigClient 94.7% 58.3%
Weaviate.Client.CollectionsClient 32.3% 35%
Weaviate.Client.Configure 65.7% 65.7%
Weaviate.Client.Connect 25.5% 0%
Weaviate.Client.DataClient 91.4% 79.6%
Weaviate.Client.DefaultTokenServiceFactory 5.7% 6.8%
Weaviate.Client.DependencyInjection.WeaviateClientFactory 0% 0%
Weaviate.Client.DependencyInjection.WeaviateInitializationService 0%
Weaviate.Client.DependencyInjection.WeaviateOptions 0%
Weaviate.Client.DependencyInjection.WeaviateServiceCollectionExtensions 0% 0%
Weaviate.Client.Factory 100%
Weaviate.Client.Generate 100%
Weaviate.Client.GenerateClient 38.4% 45.6%
Weaviate.Client.GenerateClientHybridExtensions 48.8%
Weaviate.Client.GenerativeConfigFactory 5.2% 100%
Weaviate.Client.GenerativeProviderFactory 1%
Weaviate.Client.GroupsClient 100%
Weaviate.Client.GroupsOidcClient 47.8%
Weaviate.Client.Grpc.RetryInterceptor 41.6% 37.5%
Weaviate.Client.Grpc.WeaviateGrpcClient 76.5% 61.4%
Weaviate.Client.Grpc.WeaviateGrpcServerException 0%
Weaviate.Client.Internal.AutoArray`1 100% 100%
Weaviate.Client.Internal.AutoArrayBuilder 100% 100%
Weaviate.Client.Internal.ExceptionHelper 89.6% 86.5%
Weaviate.Client.Internal.KeySortedList`2 43.7%
Weaviate.Client.Internal.MultiKeySortedList`2 85.3% 87.5%
Weaviate.Client.Internal.ObjectHelper 51.2% 36.4%
Weaviate.Client.Internal.RetryHandler 98.1% 83.3%
Weaviate.Client.Internal.TimeoutHelper 100% 100%
Weaviate.Client.Models.Aggregate 100%
Weaviate.Client.Models.AggregateGroupByResult 42.2% 19.8%
Weaviate.Client.Models.AggregateResult 92.6% 69.7%
Weaviate.Client.Models.Alias 100%
Weaviate.Client.Models.AliasesResource 100%
Weaviate.Client.Models.AndNestedFilter 50%
Weaviate.Client.Models.Backup 60%
Weaviate.Client.Models.BackupBackend 40%
Weaviate.Client.Models.BackupClientConfig 100%
Weaviate.Client.Models.BackupCreateOperation 100%
Weaviate.Client.Models.BackupCreateRequest 100%
Weaviate.Client.Models.BackupOperationBase 66.1% 65.3%
Weaviate.Client.Models.BackupRestoreOperation 100%
Weaviate.Client.Models.BackupRestoreRequest 100%
Weaviate.Client.Models.BackupsResource 100%
Weaviate.Client.Models.BackupStatusExtensions 64.2% 37.5%
Weaviate.Client.Models.BatchInsertRequest 52.1%
Weaviate.Client.Models.BatchInsertResponse 80%
Weaviate.Client.Models.BatchInsertResponseEntry 100%
Weaviate.Client.Models.BatchReferenceReturn 29% 0%
Weaviate.Client.Models.BM25Config 66.6% 83.3%
Weaviate.Client.Models.Bm25ConfigUpdate 60% 50%
Weaviate.Client.Models.BM25Operator 66.6%
Weaviate.Client.Models.ClusterNode 38.4%
Weaviate.Client.Models.ClusterNodeVerbose 23% 0%
Weaviate.Client.Models.CollectionConfig 91.3% 57.1%
Weaviate.Client.Models.CollectionConfigCommon 85.8% 57.1%
Weaviate.Client.Models.CollectionConfigExport 100% 100%
Weaviate.Client.Models.CollectionsResource 100%
Weaviate.Client.Models.CollectionUpdate 42.2% 50%
Weaviate.Client.Models.CurrentUserInfo 80%
Weaviate.Client.Models.DatabaseUser 66.6%
Weaviate.Client.Models.DataReference 100%
Weaviate.Client.Models.DataResource 100%
Weaviate.Client.Models.DataTypeExtensions 0% 0%
Weaviate.Client.Models.DeleteManyObjectResult 100%
Weaviate.Client.Models.DeleteManyResult 100%
Weaviate.Client.Models.DynamicDto 0%
Weaviate.Client.Models.EmptyBackend 33.3%
Weaviate.Client.Models.EmptyStringEnumConverter`1 86.9% 66.6%
Weaviate.Client.Models.FilesystemBackend 100%
Weaviate.Client.Models.Filter 61.9% 40%
Weaviate.Client.Models.Filter`1 50% 50%
Weaviate.Client.Models.FlatDto 100%
Weaviate.Client.Models.FlexibleConverter`1 11.3% 3.4%
Weaviate.Client.Models.FlexibleStringConverter 38.4% 25%
Weaviate.Client.Models.Generative.Providers 27.8%
Weaviate.Client.Models.GenerativeConfig 7.5%
Weaviate.Client.Models.GenerativeConfigSerialization 46.8% 55.4%
Weaviate.Client.Models.GenerativeDebug 0%
Weaviate.Client.Models.GenerativeGroupByObject 100%
Weaviate.Client.Models.GenerativeGroupByResult 100%
Weaviate.Client.Models.GenerativePrompt 100%
Weaviate.Client.Models.GenerativeProvider 83.3%
Weaviate.Client.Models.GenerativeReply 100%
Weaviate.Client.Models.GenerativeResult 20% 0%
Weaviate.Client.Models.GenerativeWeaviateGroup 100%
Weaviate.Client.Models.GenerativeWeaviateObject 100%
Weaviate.Client.Models.GenerativeWeaviateResult 100%
Weaviate.Client.Models.GeoCoordinate 100%
Weaviate.Client.Models.GeoCoordinateConstraint 0%
Weaviate.Client.Models.GroupByObject 100%
Weaviate.Client.Models.GroupByRequest 100%
Weaviate.Client.Models.GroupByResult 100%
Weaviate.Client.Models.GroupByResult`2 100%
Weaviate.Client.Models.GroupedTask 100%
Weaviate.Client.Models.GroupRoleAssignment 0%
Weaviate.Client.Models.GroupsResource 100%
Weaviate.Client.Models.HFreshDto 100%
Weaviate.Client.Models.HnswDto 100%
Weaviate.Client.Models.HybridNearTextBuilder 68.8%
Weaviate.Client.Models.HybridNearVectorBuilder 60.9%
Weaviate.Client.Models.HybridVectorInput 91% 85.7%
Weaviate.Client.Models.HybridVectorInputBuilder 100%
Weaviate.Client.Models.InvertedIndexConfig 69% 72.7%
Weaviate.Client.Models.InvertedIndexConfigUpdate 80% 50%
Weaviate.Client.Models.JsonConverterEmptyCollectionAsNull 73.6% 50%
Weaviate.Client.Models.Metadata 100%
Weaviate.Client.Models.MetadataQuery 80.9%
Weaviate.Client.Models.MetaInfo 90.9% 50%
Weaviate.Client.Models.Metrics 84.8% 60%
Weaviate.Client.Models.ModelsToDtoExtensions 100% 85%
Weaviate.Client.Models.ModuleConfigList 16.6% 7.1%
Weaviate.Client.Models.Move 100%
Weaviate.Client.Models.MultiTenancyConfig 100%
Weaviate.Client.Models.MultiTenancyConfigUpdate 60%
Weaviate.Client.Models.MultiVectorDto 100%
Weaviate.Client.Models.MultiVectorEncodingDto 100%
Weaviate.Client.Models.MuveraDto 100% 100%
Weaviate.Client.Models.NamedVector 100% 100%
Weaviate.Client.Models.NearTextBuilder 100%
Weaviate.Client.Models.NearTextInput 100%
Weaviate.Client.Models.NearVectorBuilder 100%
Weaviate.Client.Models.NearVectorInput 54.5%
Weaviate.Client.Models.NestedFilter 100%
Weaviate.Client.Models.NodesResource 100%
Weaviate.Client.Models.NodeStatusExtensions 60% 20%
Weaviate.Client.Models.NotNestedFilter 100%
Weaviate.Client.Models.ObjectReference 80%
Weaviate.Client.Models.ObjectStorageBackend 100%
Weaviate.Client.Models.ObjectTTLConfig 97%
Weaviate.Client.Models.ObjectTTLConfigUpdate 89.6% 26.9%
Weaviate.Client.Models.OrNestedFilter 100%
Weaviate.Client.Models.PermissionResourceExtensions 78.9% 33.3%
Weaviate.Client.Models.Permissions 66.5% 50%
Weaviate.Client.Models.PermissionScope 100%
Weaviate.Client.Models.PhoneNumber 88.8%
Weaviate.Client.Models.Property 98.4% 79.6%
Weaviate.Client.Models.Property`1 100%
Weaviate.Client.Models.PropertyFilter 81.3% 75%
Weaviate.Client.Models.PropertyHelper 69.8% 56.9%
Weaviate.Client.Models.PropertyUpdate 25%
Weaviate.Client.Models.QueryReference 100%
Weaviate.Client.Models.Reference 100%
Weaviate.Client.Models.ReferenceFilter 100%
Weaviate.Client.Models.ReferenceUpdate 0%
Weaviate.Client.Models.ReplicateRequest 100%
Weaviate.Client.Models.ReplicateResource 100%
Weaviate.Client.Models.ReplicationClientConfig 100%
Weaviate.Client.Models.ReplicationConfig 100%
Weaviate.Client.Models.ReplicationConfigUpdate 57.1%
Weaviate.Client.Models.ReplicationOperation 65% 50%
Weaviate.Client.Models.ReplicationOperationError 0%
Weaviate.Client.Models.ReplicationOperationStatus 37.5% 0%
Weaviate.Client.Models.ReplicationOperationTracker 64% 54.5%
Weaviate.Client.Models.Rerank 100%
Weaviate.Client.Models.Reranker 16%
Weaviate.Client.Models.RerankerConfigSerialization 56.8% 55%
Weaviate.Client.Models.RoleInfo 100%
Weaviate.Client.Models.RolesResource 100%
Weaviate.Client.Models.ShardInfo 100%
Weaviate.Client.Models.ShardingConfig 100%
Weaviate.Client.Models.ShardStatusExtensions 100% 50%
Weaviate.Client.Models.SimpleTargetVectors 100%
Weaviate.Client.Models.SinglePrompt 100%
Weaviate.Client.Models.Sort 100% 50%
Weaviate.Client.Models.SortExtensions 100%
Weaviate.Client.Models.StopwordConfig 66.6% 75%
Weaviate.Client.Models.StopwordsConfigUpdate 57.1% 50%
Weaviate.Client.Models.TargetVectors 75.5% 0%
Weaviate.Client.Models.Tenant 38.8% 13.3%
Weaviate.Client.Models.TenantsResource 100%
Weaviate.Client.Models.TimeFilter 75% 25%
Weaviate.Client.Models.Typed.AggregateGroupByResult`1 100% 100%
Weaviate.Client.Models.Typed.AggregatePropertyMapper 84.8% 61.7%
Weaviate.Client.Models.Typed.AggregateResult`1 100%
Weaviate.Client.Models.Typed.BooleanMetricsAttribute 100%
Weaviate.Client.Models.Typed.DateMetricsAttribute 100%
Weaviate.Client.Models.Typed.GenerativeGroupByObject`1 0%
Weaviate.Client.Models.Typed.GenerativeGroupByResult`1 0%
Weaviate.Client.Models.Typed.GenerativeWeaviateGroup`1 0%
Weaviate.Client.Models.Typed.GenerativeWeaviateObject`1 0%
Weaviate.Client.Models.Typed.GenerativeWeaviateResult`1 0%
Weaviate.Client.Models.Typed.GroupByObject`1 0%
Weaviate.Client.Models.Typed.GroupByResult`1 0%
Weaviate.Client.Models.Typed.IntegerMetricsAttribute 100%
Weaviate.Client.Models.Typed.MetricsExtractor 81.5% 79.8%
Weaviate.Client.Models.Typed.NumberMetricsAttribute 100%
Weaviate.Client.Models.Typed.TextMetricsAttribute 100%
Weaviate.Client.Models.Typed.TypedResultConverter 20% 7.6%
Weaviate.Client.Models.Typed.WeaviateGroup`2 0%
Weaviate.Client.Models.Typed.WeaviateObject`1 47.3% 37.5%
Weaviate.Client.Models.TypedBase`1 70.5%
Weaviate.Client.Models.TypedGuid 66.6%
Weaviate.Client.Models.TypedValue`1 80%
Weaviate.Client.Models.User 0%
Weaviate.Client.Models.UserMetadata 0%
Weaviate.Client.Models.UserRoleAssignment 100%
Weaviate.Client.Models.UsersResource 100%
Weaviate.Client.Models.Vector 45.3% 28.1%
Weaviate.Client.Models.VectorBuilder 30% 27.7%
Weaviate.Client.Models.VectorConfig 82.7% 50%
Weaviate.Client.Models.VectorConfigList 59.3% 60%
Weaviate.Client.Models.VectorConfigUpdate 50%
Weaviate.Client.Models.VectorIndex 88.2%
Weaviate.Client.Models.VectorIndexConfig 100%
Weaviate.Client.Models.VectorIndexConfigUpdate 68.4% 33.3%
Weaviate.Client.Models.VectorIndexConfigUpdateDynamic 0% 0%
Weaviate.Client.Models.VectorIndexConfigUpdateFlat 40%
Weaviate.Client.Models.VectorIndexConfigUpdateHNSW 52.9%
Weaviate.Client.Models.VectorIndexMappingExtensions 88.6% 71.2%
Weaviate.Client.Models.VectorIndexSerialization 62.6% 44.1%
Weaviate.Client.Models.VectorInputBuilderFactories 100% 100%
Weaviate.Client.Models.Vectorizer 10.7% 0%
Weaviate.Client.Models.VectorizerAttribute 100%
Weaviate.Client.Models.VectorizerConfig 64.1% 56.2%
Weaviate.Client.Models.VectorizerRegistry 68.9% 71.4%
Weaviate.Client.Models.Vectorizers.VectorizerConfigFactory 58% 62.5%
Weaviate.Client.Models.VectorMulti`1 40.7% 23%
Weaviate.Client.Models.VectorQuery 45% 50%
Weaviate.Client.Models.Vectors 37.5% 100%
Weaviate.Client.Models.VectorSearchInput 86.3% 16.6%
Weaviate.Client.Models.VectorSingle`1 22.7% 0%
Weaviate.Client.Models.WeaviateGroup`1 80%
Weaviate.Client.Models.WeaviateObject 88.8%
Weaviate.Client.Models.WeaviateObjectExtensions 95.6% 75%
Weaviate.Client.Models.WeaviateResult 100%
Weaviate.Client.Models.WeaviateResult`1 100%
Weaviate.Client.Models.WeightedField 0%
Weaviate.Client.Models.WeightedFields 0% 0%
Weaviate.Client.Models.WeightedTargetVectors 100% 100%
Weaviate.Client.NearMediaBuilder 95.2% 50%
Weaviate.Client.NearMediaInput 100%
Weaviate.Client.NodesClient 87.5% 50%
Weaviate.Client.OAuthConfig 0%
Weaviate.Client.OAuthTokenService 0% 0%
Weaviate.Client.QueryClient 67.3% 55%
Weaviate.Client.QueryClientHybridExtensions 48.8% 25%
Weaviate.Client.QueryClientNearTextExtensions 74.2% 75%
Weaviate.Client.ReplicationsClient 87% 51.7%
Weaviate.Client.RerankerConfigFactory 14.2% 100%
Weaviate.Client.Rest.EnumMemberJsonConverter`1 0% 0%
Weaviate.Client.Rest.EnumMemberJsonConverterFactory 0%
Weaviate.Client.Rest.HttpResponseMessageExtensions 90.2% 62.5%
Weaviate.Client.Rest.InvalidEnumWireFormatException 0%
Weaviate.Client.Rest.WeaviateEndpoints 82.6% 81%
Weaviate.Client.Rest.WeaviateRestClient 89.6% 53.3%
Weaviate.Client.Rest.WeaviateRestClientException 50% 25%
Weaviate.Client.Rest.WeaviateRestServerException 0% 0%
Weaviate.Client.Rest.WeaviateUnexpectedStatusCodeException 100%
Weaviate.Client.RetryPolicy 81.2% 50%
Weaviate.Client.RolesClient 90.3% 50%
Weaviate.Client.Serialization.Converters.BlobPropertyConverter 58.8% 37.5%
Weaviate.Client.Serialization.Converters.BoolPropertyConverter 80% 50%
Weaviate.Client.Serialization.Converters.DatePropertyConverter 51.3% 36.8%
Weaviate.Client.Serialization.Converters.GeoPropertyConverter 52.2% 23.6%
Weaviate.Client.Serialization.Converters.IntPropertyConverter 66.6% 50%
Weaviate.Client.Serialization.Converters.NumberPropertyConverter 64.7% 47%
Weaviate.Client.Serialization.Converters.ObjectPropertyConverter 18% 7.3%
Weaviate.Client.Serialization.Converters.PhonePropertyConverter 51.8% 33.3%
Weaviate.Client.Serialization.Converters.TextPropertyConverter 75% 75%
Weaviate.Client.Serialization.Converters.UuidPropertyConverter 61.1% 37.5%
Weaviate.Client.Serialization.PropertyBag 28.9% 20.7%
Weaviate.Client.Serialization.PropertyConverterBase 65.3% 50%
Weaviate.Client.Serialization.PropertyConverterRegistry 78.1% 70.1%
Weaviate.Client.TenantsClient 84.5% 37.5%
Weaviate.Client.Typed.TypedCollectionClient`1 95.5% 50%
Weaviate.Client.Typed.TypedDataClient`1 49%
Weaviate.Client.Typed.TypedGenerateClient`1 0.8% 0%
Weaviate.Client.Typed.TypedGenerateClientHybridExtensions 0%
Weaviate.Client.Typed.TypedQueryClient`1 10.6% 100%
Weaviate.Client.Typed.TypedQueryClientHybridExtensions 0%
Weaviate.Client.UsersClient 89.4% 66.6%
Weaviate.Client.UsersDatabaseClient 100% 62.5%
Weaviate.Client.UsersOidcClient 4.5%
Weaviate.Client.Validation.TypeValidationException 55.5%
Weaviate.Client.Validation.TypeValidator 75.7% 75%
Weaviate.Client.Validation.ValidationError 83.3%
Weaviate.Client.Validation.ValidationResult 100% 100%
Weaviate.Client.Validation.ValidationWarning 75%
Weaviate.Client.ValidationExtensions 80% 100%
Weaviate.Client.VectorizerFactory 6%
Weaviate.Client.VectorizerFactoryMulti 7.6%
Weaviate.Client.WeaviateAuthenticationException 100% 100%
Weaviate.Client.WeaviateAuthorizationException 100% 100%
Weaviate.Client.WeaviateBackupConflictException 100%
Weaviate.Client.WeaviateBadRequestException 100% 100%
Weaviate.Client.WeaviateClient 80.3% 57.9%
Weaviate.Client.WeaviateClientBuilder 59.3% 53.8%
Weaviate.Client.WeaviateClientBuilderExtensions 0%
Weaviate.Client.WeaviateClientException 66.6%
Weaviate.Client.WeaviateCollectionLimitReachedException 100% 100%
Weaviate.Client.WeaviateConflictException 100%
Weaviate.Client.WeaviateDefaults 100%
Weaviate.Client.WeaviateException 66.6%
Weaviate.Client.WeaviateExtensions 78.2% 55.4%
Weaviate.Client.WeaviateExternalModuleProblemException 100% 100%
Weaviate.Client.WeaviateFeatureNotSupportedException 100% 100%
Weaviate.Client.WeaviateModuleNotAvailableException 100% 100%
Weaviate.Client.WeaviateNotFoundException 14.8% 0%
Weaviate.Client.WeaviateServerException 66.6%
Weaviate.Client.WeaviateTimeoutException 100% 100%
Weaviate.Client.WeaviateUnprocessableEntityException 100% 100%
Weaviate.Client.Analyzers - 91.4%
Name Line Branch
Weaviate.Client.Analyzers 91.4% 73%
Weaviate.Client.Analyzers.AggregatePropertySuffixAnalyzer 90% 66.6%
Weaviate.Client.Analyzers.AutoArrayUsageAnalyzer 95.4% 71.4%
Weaviate.Client.Analyzers.HybridSearchNullParametersAnalyzer 90.2% 78.5%
Weaviate.Client.Analyzers.VectorizerFactoryAnalyzer 94.3% 82.7%

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant