La API de consulta proporciona métodos de sugerencia y búsqueda para compilar una interfaz de búsqueda o incorporar resultados de la búsqueda en una aplicación.
Para aplicaciones web con requisitos mínimos, considera el uso de un widget de búsqueda. Para obtener más información, consulta Cómo crear una interfaz de búsqueda con el widget de búsqueda.
Compila una interfaz de búsqueda
Compilar una interfaz de búsqueda mínima requiere varios pasos:
- Configura una aplicación de búsqueda
- Genera credenciales OAuth para la aplicación.
- Consulta el índice
- Muestra los resultados de la consulta.
Puedes mejorar aún más la interfaz de búsqueda con características como paginación, clasificación, filtrado, facetas y sugerencias automáticas.
Configura una aplicación de búsqueda
Debes crear al menos una aplicación de búsqueda para asociarla con cada interfaz de búsqueda que crees. Una aplicación de búsqueda proporciona los parámetros predeterminados para una consulta, como las fuentes de datos que se usarán, el orden de clasificación, los filtros y las facetas que se deben solicitar. Si es necesario, puedes anular estos parámetros con la API de consulta.
Para obtener más información sobre las aplicaciones de búsqueda, consulta Personaliza la experiencia de búsqueda en Cloud Search.
Genera credenciales OAuth para la aplicación
Además de los pasos que figuran en Configura el acceso a la API de Google Cloud Search, debes generar credenciales OAuth para la aplicación web. El tipo de credenciales que creas depende del contexto en el que se usa la API.
Usa las credenciales para solicitar autorización en nombre del usuario. Usa el alcance https://www.googleapis.com/auth/cloud_search.query
cuando solicites autorización.
Para obtener información adicional sobre las opciones de OAuth y las bibliotecas cliente, consulta [Plataforma de Google Identity](https://developers.google.com/identity/choose-auth{: .external target="_blank"}.
Consultar el índice
Usa el método search
para realizar búsquedas en el índice.
Cada solicitud debe incluir dos datos: un texto query
con el que coincidan los elementos y un searchApplicationId
que identifique el ID para que use la aplicación de búsqueda.
En el fragmento siguiente, se muestra una consulta a la fuente de datos de películas para la película Titanic:
{
"query": "titanic",
"requestOptions": {
"searchApplicationId": "searchapplications/<search_app_id>"
},
}
Muestra los resultados de la consulta
Como mínimo, se espera que las interfaces de búsqueda muestren el elemento title
, así como un vínculo al elemento original. Puedes mejorar aún más la visualización de los resultados de la búsqueda si aprovechas la información adicional presente en estos, como el fragmento y los metadatos.
Controla los resultados complementarios
De forma predeterminada, Cloud Search muestra resultados complementarios cuando hay resultados insuficientes para la consulta del usuario. El campo queryInterpretation
en la respuesta indica cuándo se muestran los resultados complementarios. Si solo se muestran resultados complementarios, InterpretationType
se establece en REPLACE
. Si se muestran algunos resultados para la consulta original junto con los resultados complementarios, InterpretationType
se configura en BLEND
. En cualquier caso, QueryInterpretation.Reason = NOT_ENOUGH_RESULTS_FOUND_FOR_USER_QUERY
.
Cuando se muestren algunos resultados complementarios, considera proporcionar texto para indicar que se mostraron resultados complementarios. Por ejemplo, en el caso de un REPLACE
, puedes mostrar la string "Your search for your original query does not match any results. Se muestran resultados para búsquedas similares".
En el caso de un BLEND
, es posible que muestres la string "Your search for your original query does not match results results. Incluir resultados de consultas similares
Maneja los resultados de personas
Cloud Search muestra dos tipos de "resultados de personas": documentos relacionados con una persona cuyo nombre se usa en la consulta y la información de empleado para una persona cuyo nombre se utiliza en una consulta. El último tipo de resultado es una función de la función de búsqueda de personas de Cloud Search. Los resultados para ese tipo de consulta se pueden encontrar en el campo structuredResults
de una respuesta de la API de consulta:
{
"results": [...],
"structuredResults": [{
"person": {...}
}]
}
Desactivar las optimizaciones, incluidos los resultados complementarios
De forma predeterminada, las optimizaciones, como los resultados complementarios, están habilitadas. Sin embargo, puedes desactivar todas las optimizaciones o solo los resultados complementarios a nivel de la aplicación de búsqueda y de la consulta:
Para desactivar todas las optimizaciones a nivel de la aplicación de búsqueda, incluidos los resultados complementarios, los sinónimos y las correcciones ortográficas, configura
QueryInterpretationConfig.force_verbatim_mode
comotrue
en las aplicaciones de búsqueda.Para desactivar todas las optimizaciones a nivel de la búsqueda, incluidos los resultados complementarios, los sinónimos y las correcciones ortográficas, configura
QueryInterpretationOptions.enableVerbatimMode
comotrue
en la consulta de búsqueda.Para desactivar los resultados complementarios a nivel de la aplicación de búsqueda, configura
QueryInterpretationOptions.forceDisableSupplementalResults
comotrue
en la consulta de búsqueda.Para desactivar los resultados complementarios a nivel de la búsqueda, configura
QueryInterpretationOptions.disableSupplementalResults
comotrue
en la consulta de búsqueda.
Destaca los fragmentos
Para los elementos mostrados que contienen texto indexado o contenido HTML, se muestra un fragmento del contenido. Este contenido ayuda a los usuarios a determinar la relevancia del elemento que se muestra.
Si los términos de la consulta están presentes en el fragmento, también se muestran uno o más rangos de coincidencia que identifican la ubicación de los términos.
Usa matchRanges
para destacar el texto coincidente cuando se rendericen los resultados. El siguiente ejemplo de javascript convierte el fragmento en un lenguaje de marcado HTML con cada rango coincidente en una etiqueta <span>
.
function highlightSnippet(snippet) {
let text = snippet.snippet;
let formattedText = text;
if (snippet.matchRanges) {
let parts = [];
let index = 0;
for (let match of snippet.matchRanges) {
let start = match.start || 0; // Default to 0 if omitted
let end = match.end;
if (index < start) { // Include any leading text before/between ranges
parts.push(text.slice(index, start));
}
parts.push('<span class="highlight">');
parts.push(text.slice(start, end));
parts.push('</span>');
index = end;
}
parts.push(text.slice(index)); // Include any trailing text after last range
formattedText = parts.join('');
}
return formattedText;
}
Dado el fragmento:
{
"snippet": "This is an example snippet...",
"matchRanges": [
{
"start": 11,
"end": 18
}
]
}
La string HTML resultante es:
This is an <span class="highlight">example</span> snippet...
Muestra los metadatos
Usa el campo metadata
a fin de mostrar información adicional sobre el elemento mostrado que puede ser relevante para los usuarios. El campo metadata
incluye el createTime
y el updateTime
del elemento, así como cualquier dato estructurado, que se pueda mostrar, asociado con el elemento.
Para mostrar los datos estructurados, usa el campo displayOptions
. El campo displayOptions
contiene la etiqueta de visualización para el tipo de objeto y un conjunto de metalines
. Cada metalínea es un arreglo de etiquetas de visualización y pares de valor configurados en el esquema.
Recupera resultados adicionales
Para recuperar resultados adicionales, configura el campo start
en la solicitud para la compensación deseada. Puedes ajustar el tamaño de cada página con el campo pageSize
.
Para mostrar la cantidad de elementos mostrados o los controles de paginación para paginar los elementos mostrados, usa el campo resultCount
. Se proporciona un valor estimado o real según el tamaño del conjunto de resultados.
Ordenar resultados
Usa el campo sortOptions
para especificar el orden de los elementos mostrados. El valor sortOptions
es un objeto con dos campos:
operatorName
: Un operador para ordenar la propiedad de los datos estructurados. Para las propiedades con operadores múltiples, solo puedes ordenar con el operador de igualdad principalsortOrder
: Es la dirección para ordenar, ya seaASCENDING
oDESCENDING
.
La relevancia también se usa como la clave de orden secundaria. Si no se especifica ningún orden en una consulta, los resultados se clasifican solo por relevancia.
"sortOptions": {
"operatorName": "priority",
"sortOrder": "DESCENDING"
}
Agrega filtros
Además de las expresiones de la consulta, puedes restringir aún más los resultados si aplicas filtros. Puedes especificar filtros en la aplicación de búsqueda o en la solicitud de búsqueda.
Para agregar filtros en una solicitud o aplicación de búsqueda, agrega el filtro en el campo dataSourceRestrictions.filterOptions[]
.
Hay 2 formas principales de filtrar aún más una fuente de datos:
- Filtros de objeto, a través de la propiedad
filterOptions[].objectType
: restringe los elementos coincidentes al tipo especificado como se define en un esquema personalizado. - Filtros de valor: restringe los elementos coincidentes en función de un operador de consulta y el valor suministrado.
Los filtros compuestos permiten combinar los filtros de varios valores en expresiones lógicas para consultas más complejas.
En el ejemplo del esquema de película, puedes aplicar una restricción de edad según el usuario actual y restringir las películas disponibles en función de la clasificación MPAA.
{
"query": "adventure",
"requestOptions": {
"searchApplicationId": "<search_app_id>"
},
"dataSourceRestrictions": [
{
"source": {
"name": "datasources/<data_source_id>"
},
"filterOptions": [
{
"objectType": "movie",
"filter": {
"compositeFilter": {
"logicOperator": "AND"
"subFilters": [
{
"compositeFilter": {
"logicOperator": "OR"
"subFilters": [
{
"valueFilter": {
"operatorName": "rated",
"value": {
"stringValue": "G"
}
}
},
{
"valueFilter": {
"operatorName": "rated",
"value": {
"stringValue": "PG"
}
}
}
]
}
]
}
}
}
]
}
]
}
Define mejor los resultados con facetas
Las facetas son propiedades indexadas que representan categorías para definir mejor los resultados de la búsqueda. Usa las facetas para ayudar a los usuarios a definir mejor sus consultas de manera interactiva y encontrar elementos relevantes más rápido.
Las facetas se pueden definir en tu aplicación de búsqueda y se pueden anular mediante la configuración en la consulta.
Cuando se solicitan facetas, Cloud Search calcula los valores más frecuentes para las propiedades solicitadas entre los elementos coincidentes. Estos valores se muestran en la respuesta. Usa estos valores para construir filtros que limiten los resultados en consultas posteriores.
El patrón de interacción típico con las facetas es:
- Realiza una consulta inicial y especifica qué propiedades incluir en los resultados de faceta.
- Procesa los resultados de faceta y búsqueda.
- El usuario selecciona uno o más valores de facetas para definir mejor los resultados.
- Repite la consulta con un filtro basado en los valores seleccionados.
Por ejemplo, para habilitar el perfeccionamiento de las consultas de películas por año y la calificación MPAA, debes incluir la propiedad facetOptions
en la consulta.
"facetOptions": [
{
"sourceName": "datasources/<data_source_id>",
"operatorName": "year"
},
{
"sourceName": "datasources/<data_source_id>",
"operatorName": "rated"
}
]
Resultados de facetas con campos basados en números enteros
También puedes facetar los resultados de solicitudes con campos basados en números enteros. Por ejemplo, puedes marcar una propiedad de número entero llamada book_pages
como faceta para definir mejor los resultados de una búsqueda de libros con páginas que tengan el valor "100-200".
Cuando configures el esquema de tu campo de propiedad de número entero, establece isFacetable
en true
y agrega las opciones de agrupamiento correspondientes a la integerPropertyOptions
.
Esto garantiza que cada propiedad de faceta de número entero tenga opciones de agrupamiento predeterminadas.
Cuando definas la lógica de las opciones de agrupamiento, proporciona un arreglo de valores incrementales que representen rangos. Por ejemplo, si el usuario final especifica rangos como 2, 5, 10, 100
, se calculan las facetas de <2
, [2-5)
, [5-10)
, [10-100)
y >=100
.
Puedes anular las facetas basadas en números enteros si defines las mismas opciones de agrupamiento en facetOptions
en la solicitud. Si es necesario, Cloud Search usa las opciones de agrupamiento definidas en el esquema cuando ni la aplicación de búsqueda ni la solicitud de consulta tienen opciones de faceta definidas. Las facetas definidas en la consulta tienen prioridad sobre las que se definen en la aplicación de búsqueda, y las que se definen en la aplicación tienen prioridad sobre las que se definen en el esquema.
Resultados de facetas según el tamaño o la fecha del documento
Puedes usar operadores reservados para definir mejor los resultados de la búsqueda según el tamaño del archivo del documento, en bytes o cuando se creó o modificó un documento. No necesitas definir un esquema personalizado, pero sí debes especificar el valor operatorName
en el FacetOptions
de tu aplicación de búsqueda.
- Para facetas por tamaño de documento, usa
itemsize
y define las opciones de agrupamiento. - Para facetas por fecha de creación de documentos, usa
createddatetimestamp
. - Para facetas según la fecha de modificación del documento, usa
lastmodified
.
Interpreta los depósitos de facetas
La propiedad facetResults
en la respuesta a la consulta de búsqueda incluye la solicitud de filtro exacto del usuario en el campo filter
para cada bucket
.
Para las facetas que no se basan en números enteros, facetResults
incluye una entrada para cada propiedad solicitada. Para cada propiedad, se proporciona una lista de valores o rangos, llamada buckets
. Los valores más frecuentes aparecen primero.
Cuando un usuario selecciona uno o más valores para filtrar, construye una nueva consulta con los filtros seleccionados y vuelve a consultar la API.
Agrega sugerencias
Usa la API sugerida para autocompletar consultas en función del historial de consultas del usuario, así como los contactos y sus corpus de documentos.
Por ejemplo, la siguiente llamada ofrece sugerencias para la frase parcial jo.
{
"query": "jo",
"requestOptions": {
"searchApplicationId": "<search_app_id>",
"peoplePhotoOptions": {
"peoplePhotoUrlSizeInPx": 32
},
"timeZone": "America/Denver"
}
}
Luego, puedes mostrar las sugerencias resultantes según corresponda para tu aplicación.