Skip to content

[WIP] Metastore contextual search#6595

Draft
dengzhhu653 wants to merge 1 commit into
apache:masterfrom
dengzhhu653:HIVE-29681
Draft

[WIP] Metastore contextual search#6595
dengzhhu653 wants to merge 1 commit into
apache:masterfrom
dengzhhu653:HIVE-29681

Conversation

@dengzhhu653

Copy link
Copy Markdown
Member

What changes were proposed in this pull request?

Why are the changes needed?

Does this PR introduce any user-facing change?

How was this patch tested?

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR introduces a new metastore-search module to the standalone metastore, adding an embedded Lucene-based indexing/search subsystem with hybrid (keyword + semantic) retrieval, embedding-model integration, and backup/restore mechanics, and wires it into distribution packaging.

Changes:

  • Adds a new standalone-metastore/metastore-search Maven module and includes it in standalone-metastore build + assembly packaging.
  • Implements Lucene-backed indexing/search components (mapping, query contract, hybrid fusion, embedding inference + caching, index state/backup utilities).
  • Adds extensive unit/integration tests and supporting test utilities for indexing/search behavior and recovery scenarios.

Reviewed changes

Copilot reviewed 89 out of 89 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
standalone-metastore/pom.xml Adds metastore-search module to standalone metastore reactor build.
standalone-metastore/packaging/src/assembly/src.xml Includes metastore-search artifacts in standalone metastore assembly.
standalone-metastore/packaging/pom.xml Adds packaging dependency on hive-standalone-metastore-search.
standalone-metastore/metastore-search/src/test/resources/log4j2.properties Test logging config for the new module.
standalone-metastore/metastore-search/src/test/java/org/apache/hive/search/testutil/TestLeaderElection.java Test leader-election stub used by indexer tests.
standalone-metastore/metastore-search/src/test/java/org/apache/hive/search/testutil/StubEmbedModel.java Deterministic embedding model for tests (no ONNX runtime).
standalone-metastore/metastore-search/src/test/java/org/apache/hive/search/testutil/RealMetastoreServer.java In-process HMS server fixture for integration tests.
standalone-metastore/metastore-search/src/test/java/org/apache/hive/search/testutil/MetastoreBootstrapMocks.java Mockito helpers for bootstrap/indexer initialization tests.
standalone-metastore/metastore-search/src/test/java/org/apache/hive/search/testutil/InMemoryIndexStateClient.java In-memory IndexStateClient used across backup/restore tests.
standalone-metastore/metastore-search/src/test/java/org/apache/hive/search/testutil/IndexMutationApplier.java Applies metastore event tasks to the Indexer in tests.
standalone-metastore/metastore-search/src/test/java/org/apache/hive/search/search/TestSearchQuery.java Tests SearchQuery defaults and validation.
standalone-metastore/metastore-search/src/test/java/org/apache/hive/search/search/TestHybridSearch.java Tests hybrid query parsing and fusion-request generation.
standalone-metastore/metastore-search/src/test/java/org/apache/hive/search/search/InMemorySearchFixture.java In-memory Lucene+stub-embedding search fixture for tests.
standalone-metastore/metastore-search/src/test/java/org/apache/hive/search/metastore/TestRealMetastoreSearchIntegration.java Integration tests for bootstrap + incremental updates against real HMS.
standalone-metastore/metastore-search/src/test/java/org/apache/hive/search/metastore/TestRealMetastoreSearchHybrid.java Integration tests for keyword/hybrid behavior and ranking.
standalone-metastore/metastore-search/src/test/java/org/apache/hive/search/metastore/TestRealMetastoreSearchFailureRecovery.java Integration tests for restore and poison-event recovery behavior.
standalone-metastore/metastore-search/src/test/java/org/apache/hive/search/metastore/TestMetastoreIndexer.java Tests leader/follower bootstrap and backup restore flows.
standalone-metastore/metastore-search/src/test/java/org/apache/hive/search/metastore/TestMetastoreEventHandlerIntegration.java Tests event polling and mutation coalescing integration.
standalone-metastore/metastore-search/src/test/java/org/apache/hive/search/metastore/TestBootstrapIndexer.java Tests bulk bootstrap indexing behavior and failures.
standalone-metastore/metastore-search/src/test/java/org/apache/hive/search/mapping/TestIndexMapping.java Tests default schema/hybrid-field exposure and analyzers.
standalone-metastore/metastore-search/src/test/java/org/apache/hive/search/inference/TestEmbedModelRegistry.java Tests model registry behavior and deterministic stub vectors.
standalone-metastore/metastore-search/src/test/java/org/apache/hive/search/inference/TestEmbeddingPrompt.java Tests embedding prompt prefix logic.
standalone-metastore/metastore-search/src/test/java/org/apache/hive/search/inference/TestEmbeddingCache.java Tests embedding cache scoping, copying, and hit/miss tracking.
standalone-metastore/metastore-search/src/test/java/org/apache/hive/search/index/TestIndexManagerFailureRecovery.java Tests unhealthy index state gating.
standalone-metastore/metastore-search/src/test/java/org/apache/hive/search/index/TestIndexerSearchIntegration.java Tests end-to-end indexing/search over in-memory fixture.
standalone-metastore/metastore-search/src/test/java/org/apache/hive/search/index/TestIndexerFlushCommit.java Tests commit/flush thresholds and forced commits.
standalone-metastore/metastore-search/src/test/java/org/apache/hive/search/index/TestIndexerEmbeddingCache.java Tests embedding cache dedupe behavior in indexing pipeline.
standalone-metastore/metastore-search/src/test/java/org/apache/hive/search/index/store/TestIndexBackupUtils.java Tests backup sync/restore correctness and staging handling.
standalone-metastore/metastore-search/src/test/java/org/apache/hive/search/index/store/TestIndexBackupFailureRecovery.java Tests interrupted/partial restore and stale-file cleanup behavior.
standalone-metastore/metastore-search/src/test/java/org/apache/hive/search/index/manifest/TestIndexManifest.java Tests manifest JSON, diffing, and equality semantics.
standalone-metastore/metastore-search/src/test/java/org/apache/hive/search/config/TestSearchConfig.java Tests SearchConfig defaults and overrides.
standalone-metastore/metastore-search/src/test/java/org/apache/hive/search/config/TestIndexStateConfig.java Tests IndexStateConfig remote/memory flags and URI validation.
standalone-metastore/metastore-search/src/test/java/org/apache/hive/search/config/TestIndexConfig.java Tests IndexConfig defaults and overrides.
standalone-metastore/metastore-search/src/main/java/org/apache/lucene/search/package-info.java Documents copied Lucene-like classes placed under Lucene package namespace.
standalone-metastore/metastore-search/src/main/java/org/apache/lucene/search/BayesianScoreEstimator.java Adds Bayesian score parameter estimation utility used by fusion scoring.
standalone-metastore/metastore-search/src/main/java/org/apache/hive/search/search/TableSearchResult.java Public-ish result wrapper for table search hits and totals.
standalone-metastore/metastore-search/src/main/java/org/apache/hive/search/search/TableSearchHit.java Search hit type with table identity, score, and returned fields.
standalone-metastore/metastore-search/src/main/java/org/apache/hive/search/search/SearchReqResp.java Internal request/response records and search mode enum.
standalone-metastore/metastore-search/src/main/java/org/apache/hive/search/search/SearchQuery.java Narrow public query contract and validation helpers.
standalone-metastore/metastore-search/src/main/java/org/apache/hive/search/search/SearchBackend.java Pluggable backend interface for search implementations.
standalone-metastore/metastore-search/src/main/java/org/apache/hive/search/search/LuceneSearchBackend.java Embedded Lucene backend implementation + async init readiness.
standalone-metastore/metastore-search/src/main/java/org/apache/hive/search/search/HybridSearch.java Hybrid query parsing and fusion request builder.
standalone-metastore/metastore-search/src/main/java/org/apache/hive/search/metastore/MetastoreTableMapper.java Maps HMS Table metadata into a Lucene document schema.
standalone-metastore/metastore-search/src/main/java/org/apache/hive/search/metastore/MetastoreSchemas.java Defines the default index mapping for Hive tables.
standalone-metastore/metastore-search/src/main/java/org/apache/hive/search/metastore/MetastoreEventListener.java Listener contract for coalesced indexing tasks and health signals.
standalone-metastore/metastore-search/src/main/java/org/apache/hive/search/metastore/MetastoreCluster.java Leader-election wiring for distributed index coordination.
standalone-metastore/metastore-search/src/main/java/org/apache/hive/search/mapping/TableDocument.java Builds Lucene Documents from mapped fields (lexical/filter/semantic).
standalone-metastore/metastore-search/src/main/java/org/apache/hive/search/mapping/SearchParams.java Field search parameters (lexical/semantic/hybrid + distance).
standalone-metastore/metastore-search/src/main/java/org/apache/hive/search/mapping/IndexMapping.java Index schema container with analyzers and hybrid-field helpers.
standalone-metastore/metastore-search/src/main/java/org/apache/hive/search/mapping/FieldSchema.java Schema types describing field storage/filter/search behavior.
standalone-metastore/metastore-search/src/main/java/org/apache/hive/search/mapping/field/TextField.java Field value + optional embedding.
standalone-metastore/metastore-search/src/main/java/org/apache/hive/search/mapping/field/IdField.java Identifier field wrapper.
standalone-metastore/metastore-search/src/main/java/org/apache/hive/search/mapping/field/Field.java Field interface and Javadoc.
standalone-metastore/metastore-search/src/main/java/org/apache/hive/search/inference/LocalOnnxEmbeddingModel.java ONNX embedding model adapter with single-thread inference executor.
standalone-metastore/metastore-search/src/main/java/org/apache/hive/search/inference/EmbedModelRegistry.java Model registry creation/warmup + optional embedding cache plumbing.
standalone-metastore/metastore-search/src/main/java/org/apache/hive/search/inference/EmbedModel.java Embedding model interface and task types.
standalone-metastore/metastore-search/src/main/java/org/apache/hive/search/inference/EmbeddingPrompt.java Task-based prefixing for model input strings.
standalone-metastore/metastore-search/src/main/java/org/apache/hive/search/inference/EmbeddingCache.java In-memory embedding cache keyed by model/task/text.
standalone-metastore/metastore-search/src/main/java/org/apache/hive/search/index/store/RemoteStateClient.java Hadoop FS-backed remote index state storage for backup/restore.
standalone-metastore/metastore-search/src/main/java/org/apache/hive/search/index/store/LocalStateClient.java Lucene Directory-backed local index state reader/writer + validation.
standalone-metastore/metastore-search/src/main/java/org/apache/hive/search/index/store/IndexStateClient.java Storage abstraction for manifests and index file operations.
standalone-metastore/metastore-search/src/main/java/org/apache/hive/search/index/store/IndexBackupUtils.java Backup sync/restore logic and staging manifest flow.
standalone-metastore/metastore-search/src/main/java/org/apache/hive/search/index/manifest/IndexManifest.java JSON manifest model + file diffing ops.
standalone-metastore/metastore-search/src/main/java/org/apache/hive/search/index/IndexSession.java Co-locates indexer + searcher manager + periodic refresh.
standalone-metastore/metastore-search/src/main/java/org/apache/hive/search/index/IndexManager.java Opens local/remote index state and manages health + backup flows.
standalone-metastore/metastore-search/src/main/java/org/apache/hive/search/index/FlushTrackingWriter.java Tracks Lucene flushes to gate commit frequency.
standalone-metastore/metastore-search/src/main/java/org/apache/hive/search/exception/SearchException.java Search-layer checked exception type.
standalone-metastore/metastore-search/src/main/java/org/apache/hive/search/exception/InitializeException.java Initialization exception type + wrapper helper.
standalone-metastore/metastore-search/src/main/java/org/apache/hive/search/exception/IndexNotReadyException.java Not-ready exception used by readiness checks.
standalone-metastore/metastore-search/src/main/java/org/apache/hive/search/exception/IndexNotHealthyException.java Health-gating exception surfaced when index is unhealthy.
standalone-metastore/metastore-search/src/main/java/org/apache/hive/search/exception/IndexIOException.java IO exception type for index state operations.
standalone-metastore/metastore-search/src/main/java/org/apache/hive/search/exception/IndexException.java Indexing exception type + wrapper helper.
standalone-metastore/metastore-search/src/main/java/org/apache/hive/search/config/SearchConfig.java Search tuning knobs (refresh interval, hybrid weights, init timeout, etc.).
standalone-metastore/metastore-search/src/main/java/org/apache/hive/search/config/InferenceConfig.java Embedding model configuration and local/remote model file staging.
standalone-metastore/metastore-search/src/main/java/org/apache/hive/search/config/IndexStateConfig.java Local/remote index location configuration.
standalone-metastore/metastore-search/src/main/java/org/apache/hive/search/config/IndexConfig.java Indexing configuration knobs (flush/commit, bootstrap, poll, etc.).
packaging/pom.xml Adds top-level packaging dependency on standalone-metastore-search artifact.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@SuppressWarnings("unchecked")
Map<String, Object> hybridMap = (Map<String, Object>) body;

HybridWeights weights = parseHybridWeights(hybridMap);
Comment on lines +56 to +60
Optional<IndexManifest> staging = local.readStagingManifest();
if (staging.isEmpty()) {
local.clearStagingManifest();
return;
}

package org.apache.hive.search.mapping.field;

/** A single field value within a {@lin}. */
Comment on lines +18 to +21
/**
* Classes in this package are copied from Lucene codebase.
*/
package org.apache.lucene.search; No newline at end of file

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 89 out of 89 changed files in this pull request and generated 7 comments.

Comment on lines +34 to +37
public record ParsedHybridQuery(
String field,
String queryText,
Float semanticWeight) {}
Comment on lines +48 to +52
@SuppressWarnings("unchecked")
Map<String, Object> hybridMap = (Map<String, Object>) body;

HybridWeights weights = parseHybridWeights(hybridMap);

Comment on lines +34 to +36
public static final String HYBRID_SEMANTIC_WEIGHT = "metastore.search.hybrid.semantic.weight";
public static final float HYBRID_SEMANTIC_WEIGHT_DEFAULT = 0.4f;

Comment on lines +62 to +69
public float getHybridSemanticWeight() {
float weight = configuration.getFloat(HYBRID_SEMANTIC_WEIGHT, HYBRID_SEMANTIC_WEIGHT_DEFAULT);
if (weight >= 1 || weight <= 0) {
throw new IllegalArgumentException("metastore.search.hybrid.semantic.weight " +
"should be configured as between 0.0 and 1.0");
}
return weight;
}

package org.apache.hive.search.mapping.field;

/** A single field value within a {@lin}. */
}
}

public record Response(List<Map<String, Object>> hits, long total) {}
Comment on lines +56 to +60
Optional<IndexManifest> staging = local.readStagingManifest();
if (staging.isEmpty()) {
local.clearStagingManifest();
return;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants