Visão geral do DQL
A Discovery Query Language define a sintaxe que você pode usar para filtrar, pesquisar e analisar seus dados.
Como escrever uma consulta na Discovery Query Language
A Discovery linguagem de consulta aproveita a estrutura dos documentos indexados. O seguinte trecho de JSON mostra um documento indexado de uma coleção em que o enriquecimento Entities é aplicado. Como resultado do enriquecimento, a estrutura JSON captura todas as menções de entidades conhecidas, como nomes de cidades, empresas ou pessoas famosas.
Neste exemplo, a entidade reconhecida é o nome da empresa IBM.
{
"document": {
"document_id": "f7f27ea30eb3e4c0ce21830618d9ee99",
"enriched_text": [
{
"entities": [
{
"model_name": "natural_language_understanding",
"mentions": [],
"text":"IBM",
"type":"Organization"
}
]
}
]
}
}
Para criar uma consulta que retorne todos os documentos nos quais a entidade IBM é mencionada, use a seguinte sintaxe:
Essa consulta básica contém uma expressão de caminho aninhada antes do operador :. Cada elemento de caminho é o nome de um campo no documento separado por um ponto (.). O operador : indica que o texto que
segue o operador deve ser incluído no resultado.
O operador :: indica que o texto deve ser correspondido exatamente no resultado. Para obter mais informações, consulte Operadores de consulta. Você pode ver
como os dois operadores são usados nos exemplos a seguir.
-
Para retornar documentos correspondentes em ordem de relevância, passe o seguinte objeto de dados na solicitação
POST:{ "query":"enriched_text.entities.text:IBM" } -
Para retornar documentos correspondentes em qualquer ordem, passe o seguinte objeto de dados na solicitação
POSTcomo o corpo da consulta:{ "filter":"enriched_text.entities.text::IBM" }
Usando o filtro e os parâmetros de consulta juntos
O parâmetro filter retorna mais rapidamente do que o parâmetro query e seus resultados são armazenados em cache. Se você enviar consultas que usam os parâmetros filter e query separadamente
em um pequeno conjunto de dados, cada solicitação retornará resultados semelhantes (se não idênticos).
Em grandes conjuntos de dados, se você precisar que os resultados sejam retornados em ordem de relevância, combine os parâmetros filter e query. O uso dos parâmetros juntos melhora o desempenho porque o parâmetro filter é aplicado primeiro. Ele filtra os documentos e armazena os resultados em cache. O parâmetro query classifica os resultados armazenados em cache.
Exemplo de filtro: Obter um documento por seu ID
Corpo da consulta:
{
"filter": "document_id::b6d8c6e3-1097-421b-9e39-75717d2554aa"
}
Se o documento existir, a consulta retornará 1 resultado correspondente. Se não for o caso, a consulta não retornará nenhum resultado correspondente.
Exemplo de filtro: Localizar um ID de documento por seu nome de arquivo
Se você não souber o document_id de um documento, mas souber o filename original do documento, poderá usar os parâmetros filter e return juntos para descobrir o document_id.
Corpo da consulta:
{
"filter": "extracted_metadata.filename::100674.txt",
"return": [ "document_id", "extracted_metadata" ]
}
Resposta:
{
"matching_results": 1,
"results": [
{
"document_id": "b6d8c6e3-1097-421b-9e39-75717d2554aa",
"extracted_metadata": {
"sha1": "AD447F7592A17CDCBF0A589C4E6EC2087AF7H35F",
"filename": "100674.txt",
"file_type": "text"
}
}
]
}
Exemplo de filtro: Localizar documentos que mencionam um valor de entidade
A consulta procura documentos que mencionam a entidade Gilroy e encontra 4 documentos correspondentes.
Corpo da consulta:
{
"filter": "enriched_text.entities.text::Gilroy"
}
Resposta:
{
"matching_results": 4
}
Filtragem de valores aninhados
Você pode aninhar um filtro dentro de outro para garantir que os documentos retornados correspondam a mais de uma condição.
Nos documentos usados para esses exemplos, a entidade "Gilroy" aparece como um tipo de entidade "Location" (uma cidade na Califórnia) e como um tipo de entidade "Person" (um
sobrenome). Para localizar documentos em que "Gilroy" aparece como um local, escreva uma consulta que filtre dois campos aninhados ao mesmo tempo: o texto da entidade deve ser "Gilroy" e o tipo
de entidade deve ser "Location".
Uma maneira de escrever a consulta é a seguinte:
{
"filter": "enriched_text.entities.text::Gilroy,enriched_text.entities.type::Location"
}
Essa consulta corresponde a documentos em que algum caminho enriched_text.entities.text é Gilroy e algum caminho enriched_text.entities.type::Location é Location. No entanto, não há garantia
de que esses dois caminhos estarão sob o mesmo objeto entities. Por exemplo, a consulta corresponde a documentos que têm Gilroy como um tipo de entidade Person e, ao mesmo tempo, têm algum outro objeto
do tipo de entidade Location.
Para capturar com precisão a semântica aninhada dessa consulta, aninhe os valores do filtro usando a seguinte sintaxe:
Corpo da consulta:
{
"filter": "enriched_text.entities:(text::Gilroy,type::Location)"
}
Essa consulta mais rigorosa corresponde somente aos documentos nos quais há um objeto entities com text igual a Gilroy e type igual a Location.
Como outro exemplo, se você quiser fazer a correspondência de documentos que contenham um objeto entities com text igual a Gilroy, mas type não igual a Location,
poderá usar o operador
não igual na consulta, por exemplo:
{
"filter": "enriched_text.entities:(text::Gilroy,type::!Location)"
}
Você também pode usar agregações para fazer uma filtragem mais sofisticada dos resultados. Para obter mais informações sobre os tipos de agregação disponíveis, consulte Agregações de consulta.
Para obter mais informações sobre a Discovery Query Language, consulte os tópicos a seguir: