Aller au contenu principal
Version : Stable (v4.x)

Extracteur d'enregistrements

Traduction Bêta Non Officielle

Cette page a été traduite par PageTurner AI (bêta). Non approuvée officiellement par le projet. Vous avez trouvé une erreur ? Signaler un problème →

Introduction

info

Cette documentation se concentre uniquement sur la méthode helpers.docsearch. Consultez la documentation Algolia Crawler pour plus d'informations sur le Algolia Crawler.

Les pages sont extraites par un recordExtractor. Ces extracteurs sont assignés aux actions via le paramètre recordExtractor. Ce paramètre pointe vers une fonction qui retourne les données à indexer, organisées en tableau d'objets JSON.

Les helpers sont une collection de fonctions pour extraire du contenu et générer des enregistrements Algolia.

Liens utiles

Utilisation

L'utilisation la plus courante du helper DocSearch consiste à renvoyer son résultat à la fonction 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",
},
});
},

Manipuler le DOM avec Cheerio

La Cheerio instance ($) permet de manipuler le 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",
},
});
},

Fournir des sélecteurs de repli

Les sélecteurs de repli sont utiles pour récupérer du contenu potentiellement absent sur certaines pages :

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",
],
},
});
},

Fournir du texte brut (defaultValue)

Seuls les sélecteurs lvl0 et variables personnalisées prennent en charge cette option

Vous pouvez vouloir structurer vos résultats de recherche différemment de votre site, ou fournir une defaultValue pour un sélecteur potentiellement inexistant :

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"],
},
},
});
},

Indexer du contenu pour le facettage

Ces sélecteurs prennent aussi en charge defaultValue et les sélecteurs de repli

You might want to index content that will be used as filters in your frontend (e.g. version or lang), you can define any custom variable to the recordProps object to add them to your Algolia records:

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"],
},
},
});
},

Les attributs version, lang et foo suivants seront disponibles dans vos enregistrements :

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

Vous pouvez désormais les utiliser pour filtrer vos recherches dans le frontend

Améliorer les résultats avec pageRank

Ce paramètre permet de booster des enregistrements en utilisant un attribut de classement personnalisé basé sur les pathsToMatch actuels. Les pages avec le pageRank le plus élevé seront retournées avant celles avec un pageRank inférieur. La valeur par défaut est 0 et vous pouvez passer n'importe quelle valeur numérique sous forme de chaîne, y compris des valeurs négatives.

Les résultats de recherche sont triés par poids (desc), permettant d'avoir des résultats boostés et non boostés. Le poids de chaque résultat est calculé pour une requête donnée selon plusieurs facteurs : niveau de correspondance, position, etc. La valeur pageRank s'ajoute à ce poids final. Le pageRank seul peut ne pas suffire à influencer vos résultats selon votre configuration globale de classement. Si modifier la valeur pageRank n'influence pas suffisamment vos résultats, même avec des valeurs élevées, augmentez le poids de weight.pageRank dans la section "Classement et tri" de votre index.

Vous pouvez visualiser le poids calculé directement dans le tableau de bord Algolia (dashboard.algolia.com > recherche > effectuez une recherche > survolez l'icône "critères de classement" en bas à droite de chaque enregistrement). Cela vous donnera une idée des valeurs pageRank acceptables pour votre cas.

{
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",
},
});
},
},

Réduire le nombre d'enregistrements

If you encounter the Extractors returned too many records error when your page outputs more than 750 records, the aggregateContent option helps you reduce the number of records at the content level of the 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,
});
},
},

Réduire la taille des enregistrements

If you encounter the Records extracted are too big error when crawling your website, it is usually because there is too much information in your records, or because your page is too large. The recordVersion option helps you reduce the records size by removing informations that are only used with 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",
});
},
},

Référence API des recordProps

lvl0

type: Lvl0 | requis

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

lvl1, content

type: string | string[] | requis

lvl2, lvl3, lvl4, lvl5, lvl6

type: string | string[] | optionnel

pageRank

type: number | optionnel

Voir l'exemple pratique

Variables personnalisées

type: string | string[] | CustomVariable | optionnel

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

Les variables personnalisées servent à filter your search. Vous pouvez les définir dans les recordProps

Référence API de helpers.docsearch

aggregateContent

type: boolean | défaut : true | optionnel

Cette option regroupe les enregistrements Algolia créés au niveau content du sélecteur en un seul enregistrement pour le titre correspondant.

recordVersion

type: 'v3' | 'v2' | défaut : v2 | optionnel

This option removes content from the Algolia records that are only used for DocSearch v2. If you are using the latest version of DocSearch, you can set it to v3.

indexHeadings

type: boolean | { from: number, to: number } | défaut : true | optionnel

Cette option indique au crawler si les headings (lvlX) doivent être indexés.

  • Lorsque false, seuls les enregistrements du niveau content seront créés.

  • Lorsque from, to est fourni, seuls les enregistrements pour lvlX à lvlY seront créés.