Extracteur d'enregistrements
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
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
Pour indexer du contenu utilisé comme filtres dans votre frontend (ex: version ou lang), définissez n'importe quelle variable personnalisée dans l'objet recordProps pour l'ajouter à vos enregistrements 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"],
},
},
});
},
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
Si vous rencontrez l'erreur Extractors returned too many records quand une page produit plus de 750 enregistrements. L'option aggregateContent aide à réduire le nombre d'enregistrements au niveau content de l'extracteur.
{
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
Si vous rencontrez l'erreur Records extracted are too big lors du crawl de votre site, cela est généralement dû à un excès d'informations dans vos enregistrements ou à une page trop grande. L'option recordVersion permet de réduire la taille des enregistrements en supprimant les informations uniquement utilisées avec 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| optional
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
Cette option supprime des enregistrements Algolia les contenus exclusivement utilisés pour DocSearch v2. Si vous utilisez la dernière version de DocSearch, vous pouvez la définir sur 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 niveaucontentseront créés. -
Lorsque
from, toest fourni, seuls les enregistrements pourlvlXàlvlYseront créés.