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:

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: