IBM Cloud Docs
Visión general de DQL

Visión general de DQL

El Discovery Lenguaje de consulta define la sintaxis que puede utilizar para filtrar, buscar y analizar sus datos.

Cómo escribir una consulta Discovery Lenguaje de consultas

El Discovery Lenguaje de consulta aprovecha la estructura de los documentos indexados. El siguiente fragmento JSON muestra un documento indexado de una colección en la que se aplica el enriquecimiento Entidades. Como resultado del enriquecimiento, la estructura JSON captura cualquier mención de entidades conocidas, como nombres de ciudades, empresas o personajes famosos.

En este ejemplo, la entidad reconocida es el nombre de la empresa IBM.

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

Para crear una consulta que devuelva todos los documentos en los que se menciona la entidad IBM, utilice la siguiente sintaxis:

La estructura de la consulta enriched_text.entities.text:IBM, donde texto en texto_enriquecido es el campo donde se aplica el enriquecimiento, y IBM es el término que se busca en el subcampo enriched_text.entities.text.
Example query structure

Esta consulta básica contiene una expresión de ruta anidada antes del operador :. Cada elemento path es el nombre de un campo del documento separado por un punto (.). El operador : indica que el texto que sigue al operador debe incluirse en el resultado.

El operador :: indica que el texto debe coincidir exactamente en el resultado. Para obtener más información, consulte Operadores de consulta. Puede ver cómo se utilizan los dos operadores en los siguientes ejemplos.

  • Para devolver documentos coincidentes por orden de relevancia, pase el siguiente objeto de datos en la solicitud POST:

    {
      "query":"enriched_text.entities.text:IBM"
    }
    
  • Para devolver documentos coincidentes en cualquier orden, pase el siguiente objeto de datos en la solicitud POST como cuerpo de la consulta:

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

Utilización conjunta de los parámetros de filtro y consulta

El parámetro filter devuelve más rápido que el parámetro query y sus resultados se almacenan en caché. Si envía consultas que utilizan los parámetros filter y query por separado en un conjunto de datos pequeño, cada solicitud devuelve resultados similares (si no idénticos).

En conjuntos de datos grandes, si necesita que los resultados se devuelvan por orden de relevancia, combine los parámetros filter y query. Usar los parámetros juntos mejora el rendimiento porque el parámetro filter se aplica primero. Filtra los documentos y almacena en caché los resultados. El parámetro " query " clasifica los resultados almacenados en caché.

Ejemplo de filtro: Obtener un documento por su ID

Cuerpo de la consulta:

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

Si el documento existe, la consulta devuelve 1 resultado coincidente. Si no es así, la consulta no devuelve resultados coincidentes.

Ejemplo de filtro: Buscar un ID de documento por su nombre de archivo

Si no conoce el document_id de un documento, pero conoce el filename original del documento, puede utilizar los parámetros filter y return juntos para descubrir el document_id.

Cuerpo de la consulta:

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

Respuesta:

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

Ejemplo de filtro: Buscar documentos que mencionen un valor de entidad

La consulta busca documentos que mencionen la entidad Gilroy y encuentra 4 documentos coincidentes.

Cuerpo de la consulta:

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

Respuesta:

{
  "matching_results": 4
}

Filtrado de valores anidados

Puede anidar un filtro dentro de otro para asegurarse de que los documentos devueltos cumplen más de una condición.

En los documentos utilizados para estos ejemplos, la entidad "Gilroy" aparece como tipo de entidad "Location" (una ciudad de California) y como tipo de entidad "Person" (un apellido). Para encontrar documentos en los que "Gilroy" aparezca como ubicación, escriba una consulta que filtre en dos campos anidados al mismo tiempo: el texto de la entidad debe ser "Gilroy" y el tipo de entidad debe ser "Location".

Una forma de escribir la consulta es la siguiente:

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

Esta consulta busca documentos en los que alguna ruta enriched_text.entities.text es Gilroy y alguna ruta enriched_text.entities.type::Location es Location. Sin embargo, no hay garantía de que esas dos rutas estén bajo el mismo objeto entities. Por ejemplo, la consulta coincide con documentos que tienen Gilroy como tipo de entidad Person y, al mismo tiempo, tienen algún otro objeto de tipo de entidad Location.

Para capturar con precisión la semántica anidada de esta consulta, anide los valores del filtro utilizando la siguiente sintaxis:

Cuerpo de la consulta:

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

Esta consulta más estricta sólo coincide con aquellos documentos en los que hay un objeto entities con text igual a Gilroy y type igual a Location.

Otro ejemplo: si desea buscar documentos que contengan un objeto entities con text igual a Gilroy pero type no igual a Location, puede utilizar el operador no igual en la consulta, por ejemplo:

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

También puede utilizar agregaciones para realizar un filtrado más sofisticado de los resultados. Para obtener más información sobre los tipos de agregación disponibles, consulte Agregaciones de consultas.

Para obtener más información sobre el lenguaje de consulta de la base de datos de la red ( Discovery ), consulte los siguientes temas: