Estruturar um esquema para interpretação ideal de consultas

O recurso interpretação de consulta do Cloud Search interpreta automaticamente os operadores e os filtros na consulta de um usuário e converte esses elementos em uma consulta baseada no operador e estruturada. A interpretação de consulta usa operadores definidos no esquema e os documentos indexados para deduzir o significado da consulta do usuário. Esse recurso permite que o usuário use o mínimo de palavras-chave e, ao mesmo tempo, receba resultados precisos.

Os resultados reais apresentados ao usuário dependem da confiança da interpretação de consulta. A confiança é baseada em vários fatores, que incluem onde as strings de consulta aparecem em documentos indexados. Se uma string, como o nome do ator "Tom Hanks", aparece consistentemente em um campo de esquema chamado actors, isso resulta em uma maior confiança. Se a mesma string ("Tom Hanks") aparece em um parágrafo em vez de no campo de esquema, isso pode resultar em uma menor confiança. No caso de uma grande confiança, apenas os resultados da interpretação de consulta são exibidos para o usuário. No caso de uma confiança menor, os resultados da interpretação de consulta são combinados com resultados de pesquisa de palavras-chave normais.

Exemplo de interpretação de consulta

Imagine que você tem uma origem de dados, como um banco de dados, que contém informações sobre filmes. A Figura 1 exibe uma amostra da consulta de pesquisa e a interpretação resultante.

Visão geral da interpretação de consulta
Figura 1. Interpretação de consulta

Dada essa consulta de exemplo, a interpretação de consulta faz o seguinte:

  • Analisa o esquema e determina que os objetos de nível superior na origem de dados são classificados como objecttype:movies. Agora, a interpretação de consulta sabe que "movies" na consulta é um tipo de objeto.

  • Verifica documentos na origem de dados, em conjunto com o esquema, para determinar onde a string "action" ocorre. Se a string ocorrer principalmente em um campo de origem de dados de "genre" específico, a interpretação de consulta terá a confiança de que "action" é um valor da propriedade "genre", conforme definido no esquema. Se a string ocorrer principalmente no contexto de parágrafos de conteúdo, o nível de confiança da interpretação de consulta diminuirá.

A interpretação de consulta resultante será:

  actor:“tom hanks” genre:action objecttype:movies
    

A interpretação de consulta é ativada automaticamente para todos os clientes do Cloud Search sem nenhum trabalho extra. No entanto, para uma interpretação de consulta ideal, estruture seu esquema de acordo com as instruções neste documento.

Estruturar seu esquema para dar suporte à interpretação de consulta

É preciso estruturar seu esquema para garantir que você possa aproveitar a interpretação de consulta.

Ativar interpretações de nome de exibição

A interpretação de consulta do Cloud Search utiliza objectDefinitions e propertyDefinitions em um esquema para interpretar a consulta de um usuário e ajustar os resultados. Para maximizar o benefício desses elementos de esquema, é necessário criar nomes de exibição intuitivos usando displayLabel para nomes de propriedades, objectDisplayLabel para nomes de objetos e operatorName para operadores.

O esquema a seguir mostra nomes de exibição intuitivos para um objeto "movie":

{
      "objectDefinitions": [
        {
          "name": "movie",
            "options": {
              "displayOptions": {
              "objectDisplayLabel": "Films"
            }
            ...
          },
          "propertyDefinitions": [
            {
              "name": "genre",
              "isReturnable": true,
              "isRepeatable": true,
              "isFacetable": true,
              "textPropertyOptions": {
              "retrievalImportance": { "importance": "HIGHEST" },
              "operatorOptions": {
                "operatorName": "genre"
              }
            },
            "displayOptions": {
              "displayLabel": "Category"
            }
          },
          ...
          ]
        }
      ]
    }
    

No exemplo anterior, ocorre o seguinte:

  • A definição do objeto "movie" tem "Film" como objectDisplayLabel.

  • O gênero propertyDefinition tem um "genre" como operatorName e uma "Category" como displayLabel.

Esses nomes de exibição permitem que o Cloud Search faça as seguintes interpretações de consulta:

  • "action movies", "genre action type movies" ou "movies genre action" são interpretados como genre:action object:movies.
  • "movies with genre action or thriller" é interpretado como objecttype:movies genre:(action OR thriller).
  • "action film" ou "action films" é interpretado como genre:action objecttype:movies.
  • "comedy category movies" é interpretado como genre:comedy objecttype:movies.

Ativar interpretações de data, numéricas e de classificação

Você precisa definir lessThanOperatorName e greaterThanOperatorName, especificados em IntegerOpreatorOptions, para todas as propriedades numéricas e de data. Essas configurações ativam interpretações numéricas e de data automáticas. Além disso, para ativar interpretações de classificação, defina a opção isSortable para propriedades numéricas e de data. O esquema a seguir mostra como ativar essas opções.

{
      "objectDefinitions": [
        {
          "options": {
            "displayOptions": {
              "objectDisplayLabel": "Films"
            }
          },
          "propertyDefinitions": [
            {
              "name": "runtime",
              "isReturnable": true,
              "isSortable": true,
              "integerPropertyOptions": {
                "orderedRanking": "DESCENDING",
                "minimumValue": {
                  "value": 10
                },
                "maximumValue": {
                  "value": 500
                },
                "operatorOptions": {
                  "operatorName": "runtime",
                  "lessThanOperatorName": "runtimelessthan",
                  "greaterThanOperatorName": "runtimegreaterthan"
                }
              },
              "displayOptions": {
                "displayLabel": "Length"
              }
            },
            {
              "name": "releasedate",
              "isReturnable": true,
              "isSortable": true,
              "datePropertyOptions": {
                "operatorOptions": {
                  "operatorName": "releasedate",
                  "lessThanOperatorName": "releasedbefore",
                  "greaterThanOperatorName": "releasedafter"
                }
              }
            }
          ]
        }
      ]
    }
    

No exemplo anterior, ocorre o seguinte:

  • A propriedade numérica runtime faz referência à duração de um filme. O runtimelessthan e o runtimegreaterthan são definidos para essa propriedade.
  • A propriedade de data releaseDate refere-se à data em que um filme é lançado nos cinemas. O releasedbefore e o releasedafter são definidos para esta propriedade.

Essas configurações permitem que o Cloud Search faça as seguintes interpretações de consulta:

  • Supondo que o ano seja 2019, "movies released this year" é interpretado como objecttype: movies releasedafter:2019-1-1 releasedbefore:2019-12-31.
  • Supondo que a semana seja a terceira semana de março, "movies released last week" é interpretado como objecttype: movies releasedafter:2019-3-10 releasedbefore:2019-3-16.
  • "movies with runtime less than 90" é interpretado como objjecttype: movies runtimelessthan:90.
  • Supondo que o ano seja 2019, "movies released this year and length more than 120" é interpretado como releasedafter:2019-1-1 releasedbefore:2019-12-31 objecttype:movies runtimegreaterthan:120.
  • "sort movies by release date" filtraria "objecttype: movies" e os resultados apresentados seriam classificados na data de lançamento com a ordem de classificação padrão crescente.

Ativar interpretação de operador reservado

Também é possível usar os operadores incorporados reservados type, before, after e objecttype para melhorar a interpretação de consulta. Ao indexar um documento, faça o seguinte:

  1. Preencha o campo updateTime em ItemMetadata para usar os operadores before e after. Essas configurações permitem que o Cloud Search faça as seguintes interpretações de consulta:

    • "movies from last week" listaria todos os filmes que foram atualizados no índice na semana anterior.
    • "movies before jan 2019" listaria todos os filmes indexados antes de janeiro de 2019.
  2. Preencha o campo mimeType em ItemMetadata para usar a detecção automática de tipo. Uma consulta "action videos" listaria todos os documentos de filmes de ação com um tipo MIME de application/mp4, application/mpeg4, application/x-shockwave-flash video/", and application/vnd.google-apps.video`.

Limitações de interpretação de consulta

O recurso de interpretação de consulta tem as seguintes limitações.

  • A interpretação de consulta só funciona para estas ACLs de fonte de dados:
    • Todos os documentos são de domínio público (todos no domínio podem acessar).
    • Todos os documentos são públicos como origem de dados (todos que têm acesso à ACL de origem de dados).
    • A maioria dos documentos na origem de dados tem a mesma ACL (todos os documentos herdam a ACL do mesmo item de contêiner) sem outros leitores definidos.
  • Se vários operadores de esquema tiverem o mesmo valor, a interpretação desse valor para a intenção do operador de uma consulta dependerá do fator de confiança geral retornado pelo sistema de interpretação de consulta. Por exemplo, suponha que você tenha as propriedades priority e severity com os mesmos nomes de operadores definidos no esquema. Digamos que os dois operadores possam ter os valores 0, 1, 2 ou 3. Neste exemplo, "0" em uma consulta pode fazer referência ao valor do operador para priority ou severity. Esses valores são ambíguos e o nível de confiança é menor.
  • Por padrão, a interpretação de consulta do Cloud Search reduz o caso de valores de campo ao interpretar a consulta, exceto para os operadores de texto definidos com as opções exactMatchWithOperator.
  • O operador source não é aceito em consultas.
  • As consultas que combinam termos baseados no operador e termos em texto livre não são interpretadas. Por exemplo, a consulta "p0 priority cases severity:s0" não seria aceita, porque "p0 priority cases" é um termo em texto livre, enquanto "severity:s0" é um termo baseado no operador.
  • A estratégia de interpretação de consulta sempre combina os resultados interpretados com resultados comuns (não interpretados, classificados por relevância). Ela não executa uma substituição de página inteira dos resultados.