Saltar al contenido principal
Versión: Legado (v3.x)

Extractor de registros

Traducción Beta No Oficial

Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →

Introducción

información

Esta documentación solo contiene información sobre el método helpers.docsearch. Para más detalles sobre el Algolia Crawler, consulta la Documentación de Algolia Crawler.

Las páginas se extraen mediante un recordExtractor. Estos extractores se asignan a actions mediante el parámetro recordExtractor, que vincula a una función que devuelve los datos a indexar organizados en un array de objetos JSON.

Los helpers son un conjunto de funciones para extraer contenido y generar registros de Algolia.

Enlaces útiles

Uso

La forma más común de usar el helper DocSearch es devolver su resultado a la función recordExtractor.

recordExtractor: ({ helpers }) => {
return helpers.docsearch({
recordProps: {
lvl0: {
selectors: "header h1",
},
lvl1: "article h2",
lvl2: "article h3",
lvl3: "article h4",
lvl4: "article h5",
lvl5: "article h6",
content: "main p, main li",
},
});
},

Manipular el DOM con Cheerio

La Cheerio instance ($) permite manipular el DOM:

recordExtractor: ({ $, helpers }) => {
// Removing DOM elements we don't want to crawl
$(".my-warning-message").remove();

return helpers.docsearch({
recordProps: {
lvl0: {
selectors: "header h1",
},
lvl1: "article h2",
lvl2: "article h3",
lvl3: "article h4",
lvl4: "article h5",
lvl5: "article h6",
content: "main p, main li",
},
});
},

Proporcionar selectores alternativos

Los selectores alternativos son útiles al recuperar contenido que podría no existir en algunas páginas:

recordExtractor: ({ $, helpers }) => {
return helpers.docsearch({
recordProps: {
// `.exists h1` will be selected if `.exists-probably h1` does not exists.
lvl0: {
selectors: [".exists-probably h1", ".exists h1"],
}
lvl1: "article h2",
lvl2: "article h3",
lvl3: "article h4",
lvl4: "article h5",
lvl5: "article h6",
// `.exists p, .exists li` will be selected.
content: [
".does-not-exists p, .does-not-exists li",
".exists p, .exists li",
],
},
});
},

Proporcionar texto sin formato (defaultValue)

Solo los selectores lvl0 y variables personalizadas admiten esta opción

Puedes estructurar tus resultados de búsqueda diferente a tu sitio web, o proveer un defaultValue para selectores potencialmente inexistentes:

recordExtractor: ({ $, helpers }) => {
return helpers.docsearch({
recordProps: {
lvl0: {
// It also supports the fallback DOM selectors syntax!
selectors: ".exists-probably h1",
defaultValue: "myRawTextIfDoesNotExists",
},
lvl1: "article h2",
lvl2: "article h3",
lvl3: "article h4",
lvl4: "article h5",
lvl5: "article h6",
content: "main p, main li",
// The variables below can be used to filter your search
language: {
// It also supports the fallback DOM selectors syntax!
selectors: ".exists-probably .language",
// Since custom variables are used for filtering, we allow sending
// multiple raw values
defaultValue: ["en", "en-US"],
},
},
});
},

Indexar contenido para facetas

Estos selectores también admiten defaultValue y selectores alternativos

Puedes indexar contenido que se usará como filtros en tu frontend (ej. version o lang). Define cualquier variable personalizada en el objeto recordProps para añadirlas a tus registros de Algolia:

recordExtractor: ({ helpers }) => {
return helpers.docsearch({
recordProps: {
lvl0: {
selectors: "header h1",
},
lvl1: "article h2",
lvl2: "article h3",
lvl3: "article h4",
lvl4: "article h5",
lvl5: "article h6",
content: "main p, main li",
// The variables below can be used to filter your search
foo: ".bar",
language: {
// It also supports the fallback DOM selectors syntax!
selectors: ".does-not-exists",
// Since custom variables are used for filtering, we allow sending
// multiple raw values
defaultValue: ["en", "en-US"],
},
version: {
// You can send raw values without `selectors`
defaultValue: ["latest", "stable"],
},
},
});
},

Los siguientes atributos version, lang y foo estarán disponibles en tus registros:

foo: "valueFromBarSelector",
language: ["en", "en-US"],
version: ["latest", "stable"]

Ahora puedes usarlos para filtrar búsquedas en el frontend

Potenciar resultados con pageRank

Este parámetro permite potenciar registros usando un atributo de ranking personalizado basado en pathsToMatch. Las páginas con mayor pageRank aparecerán antes que las con menor pageRank. El valor predeterminado es 0 y puedes pasar cualquier valor numérico como string, incluidos valores negativos.

Los resultados se ordenan por peso (desc), permitiendo resultados potenciados y no potenciados. El peso de cada resultado se calcula para una consulta según múltiples factores: nivel de coincidencia, posición, etc. El valor pageRank se suma a este peso final. Por sí solo, pageRank podría no influir lo suficiente en tus resultados dependiendo de tu configuración de ranking general. Si cambiar pageRank no afecta lo suficiente tus resultados (incluso con valores altos), sube weight.pageRank en la página "Ranking y ordenamiento" de tu índice.

Puedes ver el peso calculado directamente en el dashboard de Algolia (dashboard.algolia.com->search->realiza una búsqueda->coloca el cursor sobre el ícono "criterios de ranking" en la esquina inferior derecha de cada registro). Esto te dará una idea de qué valor pageRank es aceptable para tu caso.

{
indexName: "YOUR_INDEX_NAME",
pathsToMatch: ["https://YOUR_WEBSITE_URL/api/**"],
recordExtractor: ({ $, helpers, url }) => {
const isDocPage = /\/[\w-]+\/docs\//.test(url.pathname);
const isBlogPage = /\/[\w-]+\/blog\//.test(url.pathname);
return helpers.docsearch({
recordProps: {
lvl0: {
selectors: "header h1",
},
lvl1: "article h2",
lvl2: "article h3",
lvl3: "article h4",
lvl4: "article h5",
lvl5: "article h6",
content: "article p, article li",
pageRank: isDocPage ? "-2000" : isBlogPage ? "-1000" : "0",
},
});
},
},

Reducir el número de registros

Si encuentras el error Extractors returned too many records cuando una página genera más de 750 registros, la opción aggregateContent ayuda a reducir registros a nivel content del extractor.

{
indexName: "YOUR_INDEX_NAME",
pathsToMatch: ["https://YOUR_WEBSITE_URL/api/**"],
recordExtractor: ({ $, helpers }) => {
return helpers.docsearch({
recordProps: {
lvl0: {
selectors: "header h1",
},
lvl1: "article h2",
lvl2: "article h3",
lvl3: "article h4",
lvl4: "article h5",
lvl5: "article h6",
content: "article p, article li",
},
aggregateContent: true,
});
},
},

Reducir el tamaño de los registros

Si encuentras el error Records extracted are too big al rastrear tu sitio web, generalmente se debe a que había demasiada información en tus registros o que tu página es demasiado grande. La opción recordVersion ayuda a reducir el tamaño de los registros eliminando información que solo se usa con DocSearch v2.

{
indexName: "YOUR_INDEX_NAME",
pathsToMatch: ["https://YOUR_WEBSITE_URL/api/**"],
recordExtractor: ({ $, helpers }) => {
return helpers.docsearch({
recordProps: {
lvl0: {
selectors: "header h1",
},
lvl1: "article h2",
lvl2: "article h3",
lvl3: "article h4",
lvl4: "article h5",
lvl5: "article h6",
content: "article p, article li",
},
recordVersion: "v3",
});
},
},

Referencia de la API de recordProps

lvl0

type: Lvl0 | requerido

type Lvl0 = {
selectors: string | string[];
defaultValue?: string;
};

lvl1, content

type: string | string[] | requerido

lvl2, lvl3, lvl4, lvl5, lvl6

type: string | string[] | opcional

pageRank

type: number | opcional

Consulta el ejemplo en vivo

Variables personalizadas

type: string | string[] | CustomVariable | opcional

type CustomVariable =
| {
defaultValue: string | string[];
}
| {
selectors: string | string[];
defaultValue?: string | string[];
};

Las variables personalizadas se usan para filter your search. Puedes definirlas en recordProps

Referencia de la API de helpers.docsearch

aggregateContent

type: boolean | valor predeterminado: true | opcional

Esta opción agrupa los registros de Algolia creados en el nivel content del selector en un único registro para su encabezado correspondiente.

recordVersion

type: 'v3' | 'v2' | valor predeterminado: v2 | opcional

Esta opción elimina contenido de los registros de Algolia que solo se usa en DocSearch v2. Si usas la última versión de DocSearch, puedes configurarlo como v3.

indexHeadings

type: boolean | { from: number, to: number } | valor predeterminado: true | opcional

Esta opción indica al rastreador si se deben indexar los headings (lvlX).

  • Cuando es false, solo se crearán registros para el nivel content.

  • Cuando se proporciona from, to, solo se crearán registros desde lvlX hasta lvlY.