DQL-Übersicht

Die Discovery Abfragesprache definiert eine Syntax, die Sie zum Filtern, Suchen und Analysieren Ihrer Daten verwenden können.

Wie schreibt man eine Discovery Query Language Abfrage

Die Discovery Abfragesprache nutzt die Struktur der indizierten Dokumente. Der folgende JSON-Ausschnitt zeigt ein indiziertes Dokument aus einer Sammlung, auf die das Entities Enrichment angewendet wird. Als Ergebnis der Anreicherung erfasst die JSON-Struktur alle Erwähnungen bekannter Entitäten, wie Städtenamen, Unternehmen oder berühmte Personen.

In diesem Beispiel ist die erkannte Entität der Firmenname IBM.

{
  "document": {
    "document_id": "f7f27ea30eb3e4c0ce21830618d9ee99",
    "enriched_text": [
      {
        "entities": [
          {
            "model_name": "natural_language_understanding",
            "mentions": [],
            "text":"IBM",
            "type":"Organization"
          }
        ]
      }
    ]
  }
}

Um eine Abfrage zu erstellen, die alle Dokumente zurückgibt, in denen die Entität IBM erwähnt wird, verwenden Sie die folgende Syntax:

Die Struktur der Abfrage enriched_text.entities.text:IBM, wobei text in enriched_text das Feld ist, auf das die Anreicherung angewendet wird, und IBM der gesuchte Begriff im Unterfeld enriched_text.entities.text ist.
Example query structure

Diese einfache Abfrage enthält einen verschachtelten Pfadausdruck vor dem Operator :. Jedes Pfadelement ist der Name eines Feldes im Dokument, getrennt durch einen Punkt (.). Der Operator : zeigt an, dass der Text, der auf den Operator folgt, in das Ergebnis aufgenommen werden muss.

Der Operator :: zeigt an, dass der Text im Ergebnis genau übereinstimmen muss. Weitere Informationen finden Sie unter Abfrageoperatoren. Wie die beiden Operatoren verwendet werden, sehen Sie in den folgenden Beispielen.

  • Um übereinstimmende Dokumente in der Reihenfolge ihrer Relevanz zurückzugeben, übergeben Sie das folgende Datenobjekt in der Anfrage POST:

    {
      "query":"enriched_text.entities.text:IBM"
    }
    
  • Um übereinstimmende Dokumente in beliebiger Reihenfolge zurückzugeben, übergeben Sie das folgende Datenobjekt in der POST-Anfrage als Abfragetext:

    {
      "filter":"enriched_text.entities.text::IBM"
    }
    

Filter und Abfrageparameter zusammen verwenden

Der Parameter filter liefert schneller als der Parameter query und seine Ergebnisse werden zwischengespeichert. Wenn Sie Abfragen mit den Parametern filter und query getrennt für einen kleinen Datensatz übermitteln, liefert jede Abfrage ähnliche (wenn auch nicht identische) Ergebnisse.

Wenn bei großen Datensätzen die Ergebnisse in der Reihenfolge ihrer Relevanz zurückgegeben werden sollen, kombinieren Sie die Parameter filter und query. Die gemeinsame Verwendung der Parameter verbessert die Leistung, da der Parameter filter zuerst angewendet wird. Es filtert die Dokumente und speichert die Ergebnisse. Der Parameter query ordnet dann die zwischengespeicherten Ergebnisse.

Beispiel für einen Filter: Abrufen eines Dokuments anhand seiner ID

Abfragekörper:

{
  "filter": "document_id::b6d8c6e3-1097-421b-9e39-75717d2554aa"
}

Wenn das Dokument existiert, liefert die Abfrage 1 übereinstimmendes Ergebnis. Ist dies nicht der Fall, liefert die Abfrage keine passenden Ergebnisse.

Beispiel für einen Filter: Suche nach einer Dokument-ID anhand des Dateinamens

Wenn Sie den document_id eines Dokuments nicht kennen, aber den ursprünglichen filename des Dokuments wissen, können Sie die Parameter filter und return zusammen verwenden, um den document_id zu ermitteln.

Abfragekörper:

{
  "filter": "extracted_metadata.filename::100674.txt",
  "return": [ "document_id", "extracted_metadata" ]
}

Antwort:

{
  "matching_results": 1,
  "results": [
    {
      "document_id": "b6d8c6e3-1097-421b-9e39-75717d2554aa",
      "extracted_metadata": {
        "sha1": "AD447F7592A17CDCBF0A589C4E6EC2087AF7H35F",
        "filename": "100674.txt",
        "file_type": "text"
      }
    }
  ]
}

Beispiel für einen Filter: Dokumente finden, die einen Entitätswert erwähnen

Die Abfrage sucht nach Dokumenten, die die Entität Gilroy erwähnen, und findet 4 passende Dokumente.

Abfragekörper:

{
  "filter": "enriched_text.entities.text::Gilroy"
}

Antwort:

{
  "matching_results": 4
}

Filterung verschachtelter Werte

Sie können einen Filter in einem anderen verschachteln, um sicherzustellen, dass die zurückgegebenen Dokumente mehr als eine Bedingung erfüllen.

In den für diese Beispiele verwendeten Dokumenten erscheint die Entität "Gilroy" sowohl als "Location" (eine Stadt in Kalifornien) als auch als "Person" (ein Nachname). Um Dokumente zu finden, in denen "Gilroy" als Ort vorkommt, schreiben Sie eine Abfrage, die gleichzeitig nach zwei verschachtelten Feldern filtert: der Entitätstext muss "Gilroy" und der Entitätstyp muss "Location" sein.

Eine Möglichkeit, die Abfrage zu schreiben, ist wie folgt:

{
  "filter": "enriched_text.entities.text::Gilroy,enriched_text.entities.type::Location"
}

Diese Abfrage findet Dokumente, bei denen ein Pfad enriched_text.entities.text Gilroy und ein Pfad enriched_text.entities.type::Location Location ist. Es gibt jedoch keine Garantie dafür, dass diese beiden Pfade unter demselben entities-Objekt liegen werden. Die Abfrage stimmt beispielsweise mit Dokumenten überein, die Gilroy als Person Entitätstyp und gleichzeitig ein anderes Location Entitätstyp-Objekt haben.

Um die verschachtelte Semantik dieser Abfrage genau zu erfassen, verschachteln Sie die Filterwerte mit der folgenden Syntax:

Abfragekörper:

{
  "filter": "enriched_text.entities:(text::Gilroy,type::Location)"
}

Diese strengere Abfrage passt nur zu Dokumenten, in denen ein entities-Objekt mit text gleich Gilroy und type gleich Location vorhanden ist.

Ein weiteres Beispiel: Wenn Sie Dokumente abgleichen möchten, die ein entities Objekt mit text gleich Gilroy aber type nicht gleich Location enthalten, können Sie den nicht gleich in der Abfrage verwenden, zum Beispiel:

{
  "filter": "enriched_text.entities:(text::Gilroy,type::!Location)"
}

Sie können auch Aggregationen verwenden, um die Ergebnisse differenzierter zu filtern. Weitere Informationen über die verfügbaren Aggregationsarten finden Sie unter Abfrageaggregationen.

Weitere Informationen zur Abfragesprache Discovery finden Sie in den folgenden Themen: