Loading...
Upload AI Search Cover

Next.js 14 - Neon.Tech Postgres DB mit Azure AI Search synchronisieren

11. Januar 2025
Inhaltsverzeichnis

In der sich schnell entwickelnden Welt der Suchfunktionen ist die Fähigkeit, Daten über verschiedene Plattformen hinweg zu verbinden und zu synchronisieren, von entscheidender Bedeutung. Dieser Artikel führt Sie durch die Verbindung einer Neon.Tech Postgres-Datenbank mit Azure AI Search unter Verwendung von Next.js 14 und bietet Ihnen eine API-Route, die die Synchronisierung nahtlos abwickelt.

Was ist

Neon.Tech ist ein innovativer Cloud-basierter Postgres-Datenbankanbieter, der hochleistungsfähige Datenlösungen mit leistungsstarken Skalierungsoptionen liefert. Neon.Tech Postgres wurde für moderne Anwendungen entwickelt und bietet vollständig verwaltete Datenbankdienste mit Echtzeitfunktionen und Integrationsmöglichkeiten. Es ist eine gute Wahl für Entwickler, die eine Postgres-basierte Lösung suchen, die mit ihren Anforderungen skalieren kann.

Was ist Azure AI Search?

Azure AI Search ist der robuste Suchdienst von Microsoft, mit dem Unternehmen ihren Anwendungen schnell erweiterte Suchfunktionen hinzufügen können. Azure AI Search basiert auf KI und bietet Funktionen wie die Verarbeitung natürlicher Sprache, kontextbezogenes Verständnis und OCR, was es ideal für Anwendungen macht, die leistungsstarke und flexible Suchfunktionen benötigen.

Installation der notwendigen NPM Packete

In Ihrem Next.js 14 Projekt müssen Sie die folgenden Pakete für die Datenbankinteraktion und Azure AI Search installieren:

# Install postgres library (or any other suitable library if you're using a custom one)
npm install pg

# Install Azure Search Documents client library
npm install @azure/search-documents

Diese Pakete ermöglichen uns eine Verbindung zu Neon.Tech Postgres und die Interaktion mit Azure AI Search in unserer Next.js-App.

Um eine neue Azure AI Search-Ressource zu erstellen, benötigen Sie ein aktives Azure-Konto und die auf Ihrem Computer installierte Azure CLI. Wenn Sie dies noch nicht getan haben, melden Sie sich mit az login an.

Erstellen Sie eine Ressourcengruppe (falls Sie noch keine haben):

az group create --name MyResourceGroup --location westeurope

Erstellen einer Azure AI Search Service Instanz:

az search service create \
  --name <your-search-service-name> \
  --resource-group MyResourceGroup \
  --location eastus \
  --sku free
  • Ersetzen Sie <Ihr-Suchdienst-Name> durch einen eindeutigen Namen für Ihren Azure-Suchdienst.

  • Die Option sku free bietet eine kostenlose Ebene mit grundlegenden Funktionen. Sie können je nach Bedarf andere SKUs wählen.

Erstellen Sie einen Index in Azure AI Search: Definieren Sie die Struktur des Indexes so, dass sie mit den Feldern übereinstimmt, die Sie indizieren wollen. Hier finden Sie ein Beispielschema für die Benutzertabelle, das in einer JSON-Datei gespeichert werden kann (z. B. indexSchema.json):

{
  "name": "users-index",
  "fields": [
    { "name": "id", "type": "Edm.String", "key": true },
    { "name": "name", "type": "Edm.String", "searchable": true },
    { "name": "email", "type": "Edm.String", "searchable": false },
    { "name": "wohnort", "type": "Edm.String", "searchable": true },
    { "name": "created_at", "type": "Edm.DateTimeOffset", "filterable": true }
  ]
}

Verwenden Sie den folgenden Befehl, um den Index anhand des JSON-Schemas zu erstellen:

az search index create \
  --name users-index \
  --service-name <your-search-service-name> \
  --resource-group MyResourceGroup \
  --body @indexSchema.json
  • Mit diesem Befehl wird das Indexschema hochgeladen und ein Index namens users-index erstellt.

Abrufen von API-Schlüsseln und Dienstnamen:

Um von Ihrer Anwendung aus mit Azure AI Search zu interagieren, benötigen Sie einen API-Schlüssel und die Service-Endpunkt-URL.

Holen Sie sich den Admin Key für Ihren Azure AI Search Service:

az search admin-key show \
  --service-name <your-search-service-name> \
  --resource-group MyResourceGroup
  • Die Ausgabe enthält primaryKey und secondaryKey. Verwenden Sie den primaryKey für Ihren API-Schlüssel im Codebeispiel.

Umgebungsvariablen konfigurieren

Erstellen Sie in Ihrem Next.js-Projekt eine Datei .env.local im Stammverzeichnis und fügen Sie die folgenden Umgebungsvariablen hinzu:

# Ersetzen Sie die Platzhalter durch Ihren tatsächlichen Azure AI Search Service-Namen und API-Schlüssel
AZURE_SEARCH_SERVICE_NAME=<your-search-service-name>
AZURE_SEARCH_API_KEY=<your-primary-key>
AZURE_SEARCH_INDEX_NAME=users-index
  • AZURE_SEARCH_SERVICE_NAME: Azure AI Search service name.

  • AZURE_SEARCH_API_KEY: Der Admin Schlüssel von vorhin.

  • AZURE_SEARCH_INDEX_NAME: Der Index-Name (users-index).

Daten synchronisieren: Die Next.js API Route

Um die Synchronisierung zwischen Neon.Tech Postgres und Azure AI Search zu implementieren, werden wir eine API-Route in unserer Next.js 14-Anwendung einrichten. Diese API-Route zieht Daten aus einer Tabelle in unserer Neon.Tech Postgres-DB und indiziert sie in Azure AI Search, wodurch robuste Suchfunktionen ermöglicht werden.

import { query } from "@/lib/postgresdb";
import { SearchClient, AzureKeyCredential } from "@azure/search-documents";
import { NextRequest, NextResponse } from "next/server";

// Environment variables for Azure AI Search configuration
const searchServiceName = process.env.AZURE_SEARCH_SERVICE_NAME!;
const searchApiKey = process.env.AZURE_SEARCH_API_KEY!;
const indexName = process.env.AZURE_SEARCH_INDEX_NAME!;

// Initialize SearchClient with Azure AI Search service
const searchClient = new SearchClient(
  `https://${searchServiceName}.search.windows.net/`,
  indexName,
  new AzureKeyCredential(searchApiKey)
);

export async function POST(req: NextRequest, res: NextResponse) {
  if (req.method !== "POST") {
    return NextResponse.json(
      { error: "Only POST requests are allowed" },
      { status: 405 }
    );
  }

  const sqlQuery = "SELECT * FROM users";
  const parameters: any = [];

  // Execute the SQL query on Neon.Tech Postgres
  const SqlResults = await query(sqlQuery, parameters);

  // Prepare documents for indexing in Azure AI Search
  const documents = SqlResults.rows.map((row) => ({
    id: row.id ? row.id.toString() : "",
    name: row.name,
    email: row.email,
    wohnort: row.wohnort,
    created_at: row.created_at,
  }));

  try {
    // Index documents into Azure AI Search
    const result = await searchClient.uploadDocuments(documents);
    return NextResponse.json(
      { message: "Documents indexed successfully", result },
      { status: 200 }
    );
  } catch (error) {
    console.error("Error indexing documents:", error);
    return NextResponse.json(
      { message: "Error indexing documents", error },
      { status: 500 }
    );
  }
}

Erläuterung des Codes

  1. Umgebungsvariablen: Wir richten Umgebungsvariablen für den Azure AI Search-Dienst ein. Diese Variablen umfassen den Servicenamen, den API-Schlüssel und den Indexnamen, um sensible Daten außerhalb der Codebase zu halten.

  2. SQL Abfrage Ausführung: Mit einer standardmäßigen SELECT *-Abfrage rufen wir Daten aus der Benutzertabelle in Neon.Tech Postgres ab. Dies wird mit der Abfragefunktion aus der importierten Datenbankbibliothek („@/lib/postgresdb“) erreicht.

  3. Vorbereitung der Daten: Wir formatieren die abgerufenen Daten so, dass sie der von Azure AI Search erwarteten Struktur entsprechen, und stellen sicher, dass jedes Dokument die erforderlichen Felder wie ID, Name, E-Mail usw. enthält.

  4. Indizierung in Azure AI Search: Schließlich verwenden wir die uploadDocuments-Methode, um diese Dokumente in unserem Azure AI Search-Index zu indizieren. Die Fehlerbehandlung ist integriert, um alle Probleme zu erfassen und zu protokollieren, die während des Indizierungsprozesses auftreten könnten.

Durchführung der Synchronisierung

Um die Synchronisierung zu testen, senden Sie eine POST-Anfrage an diese API-Route. Sobald sie ausgelöst wurde, ruft die API-Route die Daten von Neon.Tech Postgres ab, formatiert sie und lädt sie zu Azure AI Search hoch, wo sie zur Abfrage bereit sind.

Schlussfolgerung

Dieses Setup ermöglicht es Ihnen, aktuelle Daten in Azure AI Search zu pflegen und gleichzeitig von der Leistung und Flexibilität von Neon.Tech Postgres zu profitieren. Mit diesem Ansatz wird das Hinzufügen leistungsstarker Suchfunktionen zu Ihrer Anwendung einfach und effizient. Lassen Sie mich wissen, ob diese Anleitung Ihnen geholfen hat, Neon.Tech Postgres mit Azure AI Search zu synchronisieren!

Cloudapp.dev – Und bevor Sie uns verlassen:

Danke, dass Sie bis zum Ende gelesen haben. Noch eine Bitte bevor Sie gehen:

Wenn Ihnen gefallen hat was Sie gelesen haben oder wenn es Ihnen sogar geholfen hat, dann würden wir uns über einen "Clap" 👏 oder einen neuen Follower auf unseren Medium Account sehr freuen.

Oder folgen Sie uns auf Twitter -> Cloudapp.dev