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, )
| 821 | // - Configured retrieval engine registry |
| 822 | // - Error if initialization fails |
| 823 | func 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"), |