Freigeben über


Integrierte Azure KI-Analysatoren für die Dataverse Suche konfigurieren

Die Dataverse-Suche nutzt viele verschiedene Azure AI Search-Funktionen, darunter sowohl Index- als auch Suchanalysatoren, um basierend auf den Benutzeranfragen die besten Daten zurückzugeben. Mithilfe dieser integrierten Funktionen können Sie definieren, wie ein Index bestimmte Ausdrücke oder Wörter den Daten in einer Spalte und Zeile einer Tabelle am besten zuordnet.

Beispiele hierfür sind Suchzeichenfolgen mit Sonderzeichen oder häufig verwendeten Wörtern (wie „of“ und „or“), die die Back-End-Daten-Engine bei der Verarbeitung der Abfrage aus dem Suchbegriff entfernt.

Hier sind einige Beispiele, bei denen die Dataverse-Suche keine genaue Übereinstimmung zurückgibt, weil die Daten in der durchsuchten Spalte nicht leicht zu verstehen sind oder weil bestimmte Zeichen basierend auf dem vom Dataverse-Suchdienst verwendeten Standardanalysator automatisch entfernt oder ignoriert werden.

Beispiele Gewünschte Tatsächl.
AB-84(q)(1)(c)
or
AB-84(1)(1)(-c)
Genaue Übereinstimmung Unerwünschte Übereinstimmungen: Gibt Datensätze mit AB, (1) oder (c) in einer Spalte zurück, was zu mehreren Datensätzen führt, die nicht relevant sind.
2.2.3.1 Genaue Übereinstimmung Unerwünschte Übereinstimmungen: Gibt Datensätze mit 2.2, 2.3.1, .2 zurück, was zu mehreren Datensätzen führt, die nicht relevant sind.
PG-11.1 Genaue Übereinstimmung Unerwünschte Übereinstimmungen: Gibt Datensätze mit PG, -11, -11.1 zurück, was zu mehreren Datensätzen führt, die nicht relevant sind.
"%mn" +"ABC-123" Genaue Übereinstimmung für:
Datensatz hat mnABC-123
Unerwünschte Übereinstimmungen:
Datensatz mit mn
hat einen Datensatz mit ABC-123, aber enthält nicht mn
"Inspector of brakes" Genaue Übereinstimmung Unerwünschte Übereinstimmung: Inspector of boilers

Um sicherzustellen, dass die Dataverse-Suche die erwarteten Ergebnisse zurückgibt, müssen Sie möglicherweise über Analysatoren zusätzliche Anweisungen bereitstellen, um Schlüsselwörter und Ausdrücke den Daten zuzuordnen, die voraussichtlich in einem Suchbegriff zurückgegeben werden. Die Daten sind spezifisch für eine Spalte und eine Tabelle. Es ist wichtig, sicherzustellen, dass die Dataverse-Suche den besten Analysator verwendet. Dabei handelt es sich häufig um einen standardmäßigen Azure AI Search-Analysator oder bei Bedarf um einen benutzerdefinierten Analysator.

Informationen zu Analysatoren

Die Dataverse-Suche basiert auf dem Azure AI Search-Analysetools. Wenn Sie also unerwartete Ergebnisse sehen oder diese verfeinern möchten, stellen Sie sicher, dass Sie die Azure AI Search-Analysatoren gut verstehen. Lesen Sie Analysetools für die Textverarbeitung in Azure AI Search für Details und Informationen zur Funktionsweise von Azure AI Search-Analysatoren in einer Suchmaschine.

Integrierte Analysatoren

Standardmäßig verwendet die Dataverse-Suche den Microsoft-Sprachanalysator basierend auf der Basissprache der Dataverse-Organisation. Wenn kein Microsoft-Analysator vorhanden ist, verwendet die Dataverse-Suche den Lucene Analyzer. Sowohl indexierte Dokumente als auch Suchbegriffe werden während der Indexierung und Abfrageverarbeitung analysiert.

In der Dataverse-Suche wird ein Analysator automatisch für alle als durchsuchbar markierte Spalten von Zeichenfolgen oder Memos aufgerufen. Für andere Spaltentypen können Sie keine Analysatoren anwenden.

Für Ihre Suchbegriffe und -ausdrücke könnten die in Azure AI Search integrierten Analysefunktionen für Sie geeignet sein. Sie können mehr über die verfügbaren Suchanalysatoren erfahren, die Sie verwenden können: Integrierte Analysatoren, oder Sie können auch sehen, ob die verfügbare Sprachanalysatoren für Sie funktionieren. Im Allgemeinen verwenden Sie einen Sprachanalysator, wenn Sie eine Spalte haben, die zum Speichern von Daten in einer anderen Sprache als Ihrer Dataverse-Basissprache verwendet wird.

Um einen der in Azure AI Search integrierten Analysatoren für eine bestimmte Spalte zu verwenden, erstellen Sie eine Zeile in der SearchAttributeSettings-Tabelle. Stellen Sie Name, entityname und attributename für die Verwendung ein und legen Sie die settings fest, um auf einen integrierten Suchanalysator wie {"analyzer": "keyword"} oder einen Sprachanalysator wie { "analyzer": "it.microsoft"} zu verweisen. Erfahren Sie, wie Sie einen Analysator für eine Spalte festlegen

Sie können die Standardeinstellung für Zeichenfolgenspalten außer Kraft setzen. Alternative Analysatoren können ein Sprachanalysator zur linguistischen Verarbeitung, ein benutzerdefinierter Analysator oder ein integrierter Analysator aus der Liste der verfügbaren Analysatoren sein.

Einen Analysator für eine Spalte festlegen

Um einen anderen Analysator für eine Dataverse-Tabellenspalte anzuwenden, muss eine Zeile vorhanden sein, die diese Spalte identifiziert in der SearchAttributeSettings-Tabelle. Diese Tabelle enthält standardmäßig keine Daten.

Zum Festlegen dieser Eigenschaft muss kein Code geschrieben werden. Jeder mit Zugriff Power Apps und Schreibzugriff auf die SearchAttributeSettings-Tabelle kann diese Änderung vornehmen, muss jedoch besonders darauf achten, keine doppelte Zeile zu erstellen. Wenn Sie Code zum Erstellen dieser Zeile verwenden möchten, finden Sie weitere Informationen unter SearchAttributeSettings-Tabellenspalten mit Code bearbeiten.

Anmerkung

Legen Sie kein Analysetool für die primäre Namensspalte einer Tabelle fest. Sie können dies tun, aber die Ergebnisse werden nicht zuverlässig sein. Primäre Namensspalten werden anders behandelt, da die meisten Tabellen über sie verfügen und sie eine besondere Rolle spielen, indem sie den Zeichenfolgenwert bereitstellen, der zum Verknüpfen mit Datensätzen in Apps verwendet wird.

Wenn Sie ein Analysetool konfigurieren müssen, das die Daten in der primären Namensspalte einer Tabelle verwendet, erstellen Sie eine separate Zeichenfolgenspalte, und kopieren Sie den Inhalt der primären Namensspalte in diese Spalte. Legen Sie stattdessen ein Analysetool für diese Spalte fest.

Konfigurieren Sie Power Apps, um die Tabelle „SearchAttributeSettings“ zu bearbeiten

Führen Sie die folgenden Schritte aus, um die SearchAttributeSettings-Tabelle in Power Apps zu öffnen und die Ansicht zu bearbeiten, um die Bearbeitung der Spalten Name, attributename, entityname und settings zu ermöglichen.

Anmerkung

Stellen Sie sicher, dass Sie sich in der Umgebung befinden, in der Sie die Änderungen anwenden möchten, indem Sie in der Kopfzeile der Seite auf „Umgebung“ klicken und Ihre Umgebung auswählen.

  1. Wählen Sie im linken Navigationsbereich Tabellen aus.
  2. Wählen Sie Alle Tabellen aus.
  3. Suchen Sie in der oberen rechten Ecke nach searchattributesettings.
  4. Öffnen Sie die Tabelle SearchAttributeSettings.
  5. Stellen Sie sicher, dass beim Öffnen der Tabelle die Spalten Name, attributename, entityname und Einstellungen sichtbar sind. Sie können sie hinzufügen, indem Sie „+18 weitere“ neben der Spalte Name auswählen.
  6. Wählen Sie nach dem Auswählen der Spalten Speichern aus.

Dadurch wird der Dialog geschlossen und die Spalten werden auf der Seite sichtbar. Nach dem Speichern sollten die Spalten sichtbar sein.

Weitere Informationen finden Sie unter Tabellenspalten und Daten

SearchAttributeSettings-Tabellenspalten manuell bearbeiten

In der folgenden Tabelle wird beschrieben, was zu jeder Spalte hinzugefügt werden muss:

Wichtig

Die Kombination aus entityname- und attributename-Werten muss in der Tabelle SearchAttributeSettings eindeutig sein. Sie müssen sicherstellen, dass Sie keine doppelten Zeilen mit denselben Werten für diese beiden Spalten eingeben. Wenn eine doppelte Zeile vorhanden ist, gibt die Dataverse Suche einen Fehler zurück, wenn Personen eine Suche durchführen.

Um zu verhindern, dass jemand unbeabsichtigt eine doppelte Zeile erstellt, können Sie der SearchAttributeSettings-Tabelle einen Alternativschlüssel hinzufügen und dabei die Spalten entityname und attributename im Schlüssel angeben. Weitere Informationen zum Definieren von Alternativschlüsseln mithilfe von Power Apps

Name des Dataflows Was hinzugefügt wird
Name Der Name kann ein beliebiger Name sein, der Ihnen hilft, das zu konfigurierende Analysetool zu identifizieren.
entityname Der logische Name der Tabelle, die die Spalte enthält, die Sie konfigurieren.
attributename Der logische Name der Spalte der Tabelle, die der Analysator für Ihre Suchbegriffe oder -ausdrücke verwenden soll.
settings Die JSON-Zeichenfolge, die das zu konfigurierende Analysetool identifiziert. Sie sollten nur analyzer oder indexanalyzer und searchanalyzer festlegen. Die Werte könnten ungefähr so aussehen: { "analyzer": "name_analyzer"} oder {"indexanalyzer": "name_analyzer", "searchanalyzer": "name_analyzer"}

Änderungen, die an SearchAttributeSettings vorgenommen werden, brauchen möglicherweise bis zu 15 Minuten oder länger, bis sie im Suchdienst aufgeführt werden. Mithilfe der Statusmeldung können Sie den EntityStatusInfo.lastdatasynctimestamp-Wert für die Tabelle überprüfen und so feststellen, wann die letzte Synchronisierung abgeschlossen wurde.

Edit SearchAttributeSettings-Tabellenspalten mit Code bearbeiten

Der folgende Code zeigt, wie Sie die SearchAttributeSettings-Tabellenspalten mit Code aktualisieren und dabei die Erstellung doppelter Spalten oder das versehentliche Überschreiben vorhandener Werte vermeiden.

/// <summary>
/// Creates or replaces a SearchAttributeSettings record
/// </summary>
/// <param name="service">The authenticated IOrganizationService instance</param>
/// <param name="entityName">
/// The name of the entity for which the search attribute settings record is created.
/// </param>
/// <param name="attributeName">
/// The logical name of the column for which the search attribute settings record is created.
/// </param>
/// <param name="settings">The settings for the search attribute.</param>
/// <param name="overwriteExisting">Verify that the intent is to replace any existing record</param>
static void SetSearchAttributeSettings(
   IOrganizationService service,
   string entityName,
   string attributeName,
   string settings,
   bool overwriteExisting = false)
{

   try
   {
      #region Check whether record exists

      Entity existingRecord = null;

      QueryExpression query = new("searchattributesettings")
      {
         ColumnSet = new ColumnSet(
            "searchattributesettingsid",
            "entityname",
            "attributename",
            "settings"),
         Criteria = new FilterExpression(LogicalOperator.And)
         {
            Conditions = {
            new ConditionExpression("entityname", ConditionOperator.Equal, entityName),
            new ConditionExpression("attributename", ConditionOperator.Equal, attributeName)
            }
         }
      };

      // Retrieve any matching records
      EntityCollection entityCollection = service.RetrieveMultiple(query);

      if (entityCollection.Entities.Count > 1)
      {

         string message = "More than one record is found in searchattributesettings ";
         message += $"with entityname {entityName} and attributename {attributeName}.";

         throw new Exception(message);
      }

      if (entityCollection.Entities.Count == 1)
      {
         existingRecord = entityCollection.Entities[0];
      }

      #endregion Check whether record exists

      if (existingRecord != null)
      {
         string currentSettings = existingRecord.GetAttributeValue<string>("settings");
         Guid recordId = existingRecord.Id;

         if (!overwriteExisting)
         {

            string message = "An existing record is found in searchattributesettings with";
            message += $" entityname:{entityName}, attributename: {attributeName}";
            message += $" and settings: {settings}.";
            message += "Please update the value of overwriteExisting to true and ";
            message += " use the SetSearchAttributeSettings method again.";

            throw new Exception(message);
         }

         // Removing the existing record before replacing it
         service.Delete("searchattributesettings", recordId);
      }

      Entity newRecord = new("searchattributesettings")
      {
         Attributes = {
            { "entityname", entityName },
            { "attributename", attributeName },
            { "settings", settings }
         }
      };

      // Create the new record with the desired settings
      service.Create(newRecord);

   }
   catch (Exception)
   {
         throw;
   }
}

Das folgende Beispiel zeigt, wie Sie mit der SetSearchAttributeSettings-Methode einen benutzerdefinierten Analysator mit dem Namen msdyn_search_remove_parenthesis_analyzer für die Contact.JobTitle-Spalte angeben.

SetSearchAttributeSettings(
      service: service,
      entityName: "contact",
      attributeName: "jobtitle",
      settings: "{ \"analyzer\": \"msdyn_search_remove_parenthesis_analyzer\" }",
      overwriteExisting: true
   );

Erfahren Sie, wie Sie das SDK for NET verwenden

Siehe auch

Dataverse Suche
Die Dataverse-Suche in Ihrer Umgebung konfigurieren
Analysetools für die Textverarbeitung in Azure AI Search