Saltar al contenido principal
Versión: Estable (v4.x)

Ejemplos y extensiones

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 →

Estos ejemplos son interactivos. Haz clic en un botón para abrir el modal y probar una consulta.

Búsqueda básica por palabras clave

Utiliza la experiencia predeterminada con tus credenciales de índice. Funciona perfectamente para documentación típica, blogs y cualquier sitio con un índice compatible con DocSearch.

<DocSearch
appId="PMZUYBQDAK"
apiKey="24b09689d5b4223813d9b8e48563c8f6"
indexName="docsearch"
insights={true}
translations={{ button: { buttonText: 'keyword search (demo)' } }}
/>

Ask AI: Respuestas asistidas por IA

Añade Algolia AskAI para obtener respuestas sintetizadas basadas en tu contenido indexado. Puedes delimitar el contexto del LLM usando searchParameters como facetFilters, filters, attributesToRetrieve,restrictSearchableAttributes y distinct.

<DocSearch
appId="PMZUYBQDAK"
apiKey="24b09689d5b4223813d9b8e48563c8f6"
indexName="docsearch"
askAi={{
assistantId: 'askAIDemo',
searchParameters: {
facetFilters: ['language:en'],
},
}}
insights={true}
translations={{ button: { buttonText: 'search with askai (demo)' } }}
/>

Renderizado personalizado de resultados (hitComponent)

Reemplaza el marcado predeterminado de resultados para que coincida con tu marca y diseño. A continuación se muestra un ejemplo mínimo de un componente personalizado.

function CustomHit({ hit }) {
// render a compact, branded hit card
return (
<a
href={hit.url}
style={{ display: 'block', padding: '12px 16px', textDecoration: 'none' }}
>
<div style={{ display: 'flex', gap: 12 }}>
<div
style={{
width: 40,
height: 40,
backgroundColor: '#e3f2fd',
borderRadius: 6,
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
fontWeight: 600,
color: '#1976d2',
}}
>
{hit.type?.toUpperCase?.() || 'DOC'}
</div>
<div style={{ minWidth: 0 }}>
<div
style={{
fontWeight: 600,
whiteSpace: 'nowrap',
overflow: 'hidden',
textOverflow: 'ellipsis',
}}
>
{hit.hierarchy?.lvl1 || 'untitled'}
</div>
{hit.hierarchy?.lvl2 && (
<div
style={{
color: '#666',
whiteSpace: 'nowrap',
overflow: 'hidden',
textOverflow: 'ellipsis',
}}
>
{hit.hierarchy.lvl2}
</div>
)}
{hit.content && (
<div style={{ color: '#888', marginTop: 4 }}>{hit.content}</div>
)}
</div>
</div>
</a>
);
}

<DocSearch
appId="PMZUYBQDAK"
apiKey="24b09689d5b4223813d9b8e48563c8f6"
indexName="docsearch"
hitComponent={CustomHit}
insights={true}
translations={{ button: { buttonText: 'custom hits (demo)' } }}
/>;

Abrir enlaces en nuevas pestañas

Por defecto, DocSearch abre los enlaces de resultados en la misma ventana. Si necesitas que se abran en nuevas pestañas, debes usar tanto un hitComponent personalizado como la propiedad navigator para manejar consistentemente clics y navegación por teclado.

// Custom hit component with target="_blank"
function HitWithNewTab({ hit, children }) {
return (
<a href={hit.url} target="_blank" rel="noopener noreferrer">
{children}
</a>
);
}

// Navigator configuration to handle keyboard navigation
const newTabNavigator = {
navigate: ({ itemUrl }) => window.open(itemUrl, '_blank'),
navigateNewTab: ({ itemUrl }) => window.open(itemUrl, '_blank'),
navigateNewWindow: ({ itemUrl }) => window.open(itemUrl, '_blank'),
};

<DocSearch
appId="PMZUYBQDAK"
apiKey="24b09689d5b4223813d9b8e48563c8f6"
indexName="docsearch"
hitComponent={HitWithNewTab}
navigator={newTabNavigator}
insights={true}
translations={{ button: { buttonText: 'open in new tabs (demo)' } }}
/>;

advertencia

Nota: Usar solo hitComponent con target="_blank" funciona para clics de ratón, pero la navegación por teclado (flechas + Enter) requiere la propiedad navigator para abrir enlaces en nuevas pestañas consistentemente.


Trae tu propia estructura de datos con transformItems

DocSearch no está limitado a registros tipo documentación. Usa transformItems para adaptar cualquier estructura de registro al formato interno que DocSearch espera. Esto te permite implementar búsqueda para aplicaciones, centros de ayuda, registros de cambios o cualquier contenido personalizado.

El siguiente fragmento mapea un registro no estándar al formato interno. Pruébalo en vivo:

<DocSearch
appId="PMZUYBQDAK"
apiKey="24b09689d5b4223813d9b8e48563c8f6"
indexName="crawler_doc"
askAi={{ assistantId: 'askAIDemo' }}
searchParameters={{
attributesToRetrieve: ['*'],
attributesToSnippet: ['*'],
hitsPerPage: 20,
}}
transformItems={(items) =>
items.map((item) => ({
objectID: item.objectID,
content: item.content ?? '',
url: item.domain + item.path,
hierarchy: {
lvl0: (item.breadcrumb || []).join(' > ') ?? '',
lvl1: item.h1 ?? '',
lvl2: item.h2 ?? '',
lvl3: null,
lvl4: null,
lvl5: null,
lvl6: null,
},
url_without_anchor: item.domain + item.path,
type: 'content',
anchor: null,
_highlightResult: item._highlightResult,
_snippetResult: item._snippetResult,
}))
}
insights={true}
translations={{ button: { buttonText: 'transform items (demo)' } }}
/>

Consejos

  • Instrumentación: activa insights para enviar análisis de uso e iterar sobre la relevancia.

  • Delimitación de Ask AI: usa facetFilters, filters, attributesToRetrieve, restrictSearchableAttributes y distinct para controlar el contexto de IA y mejorar la calidad de las respuestas.

  • Personalización: utiliza hitComponent, transformItems y translations para integrar DocSearch nativamente en cualquier superficie de producto.