MCPcopy
hub / github.com/Tencent/WeKnora / initRetrieveEngineRegistry

Function initRetrieveEngineRegistry

internal/container/container.go:823–1132  ·  view source on GitHub ↗

initRetrieveEngineRegistry initializes the retrieval engine registry Sets up and configures various search engine backends based on configuration Supports multiple retrieval engines (PostgreSQL, ElasticsearchV7, ElasticsearchV8) Parameters: - db: Database connection - cfg: Application configuration

(
	db *gorm.DB, cfg *config.Config, auditSvc interfaces.AuditLogService,
)

Source from the content-addressed store, hash-verified

821// - Configured retrieval engine registry
822// - Error if initialization fails
823func initRetrieveEngineRegistry(
824 db *gorm.DB, cfg *config.Config, auditSvc interfaces.AuditLogService,
825) (interfaces.RetrieveEngineRegistry, error) {
826 registry := retriever.NewRetrieveEngineRegistry()
827 retrieveDriver := strings.Split(os.Getenv("RETRIEVE_DRIVER"), ",")
828 log := logger.GetLogger(context.Background())
829 // Audit sink for OpenSearch driver events (index created / reindex). Driver
830 // events fire under a tenant-scoped ctx at indexing time; the env-path
831 // registration ctx below has no tenant, so those emits self-skip.
832 auditSink := newAuditSinkAdapter(auditSvc)
833
834 if slices.Contains(retrieveDriver, "postgres") {
835 postgresRepo := postgresRepo.NewPostgresRetrieveEngineRepository(db)
836 if err := registry.Register(
837 retriever.NewKVHybridRetrieveEngine(postgresRepo, types.PostgresRetrieverEngineType),
838 ); err != nil {
839 log.Errorf("Register postgres retrieve engine failed: %v", err)
840 } else {
841 log.Infof("Register postgres retrieve engine success")
842 }
843 }
844 if slices.Contains(retrieveDriver, "sqlite") {
845 sqliteRepo := sqliteRetrieverRepo.NewSQLiteRetrieveEngineRepository(db)
846 if err := registry.Register(
847 retriever.NewKVHybridRetrieveEngine(sqliteRepo, types.SQLiteRetrieverEngineType),
848 ); err != nil {
849 log.Errorf("Register sqlite retrieve engine failed: %v", err)
850 } else {
851 log.Infof("Register sqlite retrieve engine success")
852 }
853 }
854 if slices.Contains(retrieveDriver, "elasticsearch_v8") {
855 client, err := elasticsearch.NewTypedClient(elasticsearch.Config{
856 Addresses: []string{os.Getenv("ELASTICSEARCH_ADDR")},
857 Username: os.Getenv("ELASTICSEARCH_USERNAME"),
858 Password: os.Getenv("ELASTICSEARCH_PASSWORD"),
859 })
860 if err != nil {
861 log.Errorf("Create elasticsearch_v8 client failed: %v", err)
862 } else {
863 elasticsearchRepo := elasticsearchRepoV8.NewElasticsearchEngineRepository(client, cfg, nil)
864 if err := registry.Register(
865 retriever.NewKVHybridRetrieveEngine(
866 elasticsearchRepo, types.ElasticsearchRetrieverEngineType,
867 ),
868 ); err != nil {
869 log.Errorf("Register elasticsearch_v8 retrieve engine failed: %v", err)
870 } else {
871 log.Infof("Register elasticsearch_v8 retrieve engine success")
872 }
873 }
874 }
875
876 if slices.Contains(retrieveDriver, "elasticsearch_v7") {
877 client, err := esv7.NewClient(esv7.Config{
878 Addresses: []string{os.Getenv("ELASTICSEARCH_ADDR")},
879 Username: os.Getenv("ELASTICSEARCH_USERNAME"),
880 Password: os.Getenv("ELASTICSEARCH_PASSWORD"),

Calls 7

RegisterMethod · 0.95
GetLoggerFunction · 0.92
newAuditSinkAdapterFunction · 0.85
hostFromAddrFunction · 0.85
loadDBStoresIntoRegistryFunction · 0.85