searchFileContent
Busca en el texto de los archivos adjuntos a los registros. No se requiere autorización.
Descripción
Busca en el texto de los archivos adjuntos a tus registros (PDF, documentos y similares). Se resuelve en un IFileSearchResponse con los archivos coincidentes, cada uno con el fragmento donde se encontró la coincidencia.
.searchFileContent(
,
,
,
,
,
,
,
);
Esquema de parámetros
Schema
query(required): string
Consulta de búsqueda de al menos 3 caracteres; una más corta se rechaza con 400.
ejemplo: "transportation"
langCode: string
Idioma de la consulta. Predeterminado: el langCode pasado a defineOneEntry ("en_US" si no se pasó ninguno). Un código que la búsqueda no admite (por ejemplo "xx_YY") se rechaza con 400 "Unknown text search language".
ejemplo: "en_US"
extensions: string[]
Filtrar por extensión de archivo, enviada separada por comas.
ejemplo:
[
"pdf",
"docx"
]
ownerTables: string[]
Filtrar por la sección a la que pertenece el registro adjunto, enviada separada por comas.
ejemplo:
[
"products",
"pages"
]
localeCodes: string[]
Filtrar por la configuración regional del enlace, no del contenido del archivo.
ejemplo:
[
"en_US"
]
onlyTruncated: boolean
Devolver solo archivos cuyo texto extraído fue cortado en el límite de tamaño.
offset: number
Número de registros que se omiten. Predeterminado: 0. offset + limit no debe superar 200; una ventana mayor se rechaza con 400.
ejemplo: 0
limit: number
Número de archivos que se devuelven. Predeterminado: 10, máximo 50; un valor mayor se rechaza con 400. offset + limit no debe superar 200.
ejemplo: 10
El SDK siempre envía langCode, así que de forma predeterminada la consulta se busca en el idioma de tu aplicación y queryLanguage.source es "explicit". Una consulta en otro alfabeto no se detecta automáticamente: una consulta en cirílico con el valor predeterminado en_US se sigue buscando como inglés. Para que la API elija el idioma a partir de la consulta y de la configuración del proyecto, pasa una cadena vacía como langCode.
Antes de mostrar el resultado
La unidad es un archivo, no un fragmento. Obtienes un snippet por archivo, aunque el documento coincida en veinte páginas. snippet.pageFrom indica en qué página empieza el fragmento.
Las coincidencias se marcan con caracteres de control, no con HTML. Dentro de snippet.text, cada coincidencia va envuelta entre U+0002 y U+0003. Si insertas el texto en tu marcado sin cambios, el lector no verá el resaltado, así que sustitúyelos por tus propias etiquetas. El texto procede del propio archivo, así que primero escápalo y añade las etiquetas después:
const escapeHtml = (text) =>
text
.replaceAll('&', '&')
.replaceAll('<', '<')
.replaceAll('>', '>')
.replaceAll('"', '"');
const html = escapeHtml(item.snippet?.text ?? '')
.replaceAll('\u0002', '<mark>')
.replaceAll('\u0003', '</mark>');
Qué devuelve la búsqueda
La búsqueda solo devuelve archivos de registros visibles, y solo en las secciones activadas en la configuración de tu proyecto. Las secciones personales se limitan a los registros propios de quien llama, y la sección de administradores nunca se devuelve. Una respuesta 403 significa que la búsqueda de archivos no está incluida en tu plan.
Ejemplos
Ejemplo mínimo
const response = await FileUploading.searchFileContent('transportation');
Solo PDF adjuntos a productos
const response = await FileUploading.searchFileContent(
'transportation',
'en_US',
['pdf'],
['products'],
);
Segunda página
const response = await FileUploading.searchFileContent(
'transportation',
'en_US',
undefined,
undefined,
undefined,
undefined,
10,
10,
);
Ejemplo de respuesta
{
"total": 0,
"offset": 0,
"limit": 10,
"queryLanguage": {
"resolved": [
"english"
],
"source": "explicit",
"candidates": [
"english"
]
},
"warnings": [
"processing_disabled"
],
"items": []
}
Esquema de respuesta
Esquema: IFileSearchResponse
total: number
Número total de archivos coincidentes.
ejemplo: 166
offset: number
Número de registros que se omiten.
ejemplo: 0
limit: number
Número máximo de registros que se devuelven.
ejemplo: 10
queryLanguage: IFileSearchQueryLanguage
Cómo se resolvió el idioma de la consulta.
queryLanguage.resolved: string[]
Configuraciones de búsqueda de texto con las que se ejecutó la consulta, por ejemplo english.
ejemplo: ["english"]
queryLanguage.source: string
Cómo se eligió el idioma: explicit (a partir de langCode), o script, facet, configured o fallback cuando langCode está vacío.
ejemplo: "explicit"
queryLanguage.candidates: string[]
Idiomas que se tuvieron en cuenta.
ejemplo: ["english"]
warnings: string[]
Motivos por los que el resultado puede estar vacío o ser aproximado: processing_disabled, query_too_common, query_language_capped, semantic_unavailable, fuzzy_fallback. Vacío si no hay ninguno.
items: IFileSearchItem[]
Archivos que coinciden con la consulta.
items.id: number
ID del archivo indexado.
ejemplo: 1077
items.storageKey: string
Clave del objeto en el almacenamiento; a partir de ella se construye el enlace al archivo.
ejemplo: "files/project/file/644/product/db1918c4.pdf"
items.extension: string
Extensión del archivo.
ejemplo: "pdf"
items.title: string | null
Título de los metadatos del documento, null cuando el documento no tiene ninguno.
ejemplo: "Microsoft Word - COG Agenda.docx"
items.langCode: string | null
Idioma del contenido del archivo, detectado al indexar.
ejemplo: "en"
items.pageCount: number | null
Número de páginas, para formatos paginados.
ejemplo: 244
items.rank: number
Relevancia de la coincidencia; la API ordena por ella de forma descendente.
ejemplo: 0.0971
items.snippet: IFileSearchSnippet | null
El fragmento coincidente.
items.owners: IFileSearchOwner[]
Registros a los que está vinculado el archivo, limitados a los que puede ver quien llama.
items.ownersTotal: number
Cuántos registros visibles para quien llama hacen referencia al archivo.
ejemplo: 2