Saltar al contenido principal

Configuración de Typesense

La configuración principal de Typesense se encuentra en el archivo src/utils/typesense.js.

Variables de entorno

NEXT_PUBLIC_TYPESENSE_HOST=<host>
NEXT_PUBLIC_TYPESENSE_INDEX_NAME=<index-name>
NEXT_PUBLIC_TYPESENSE_INDEX_SUGGESTIONS_NAME=<suggestions-index-name>
NEXT_PUBLIC_TYPESENSE_READONLY_API_KEY=<api-key>


## Constantes exportadas

```javascript
export const DefaultIndexName = process.env.NEXT_PUBLIC_TYPESENSE_INDEX_NAME;
export const IndexName = DefaultIndexName + '/sort/_text_match(buckets: 5):desc, weighted_score:desc';
export const IndexSuggestionsName = process.env.NEXT_PUBLIC_TYPESENSE_INDEX_SUGGESTIONS_NAME;

Campos de retorno

Son los campos que se obtendrán cuando se haga una petición a typesense, un string con cada campo separado por comas, mientras menos campos, más rápidas las consultas y mejor performance.

Las páginas de producto y de categoría obtienen toda la información del producto.

export const searchFields = [
"name",
"image",
"look_image",
"stock",
"product_link_path",
"url_path",
"price",
"objectID",
"l2",
"id",
"msrp",
"disenador",
"label_discount",
"promotion",
"has_label_discount",
"extra_tags",
"num_ratings",
"average_rating",
"is_available",
"product_link_path",
"url_product_path",
"url_path",
"sku",
"is_express_delivery",
"has_cashback",
"delivery_days"
].join(',');

export const categoryFields = [
"color_family",
"landing_pages",
].join(',').concat(',', searchFields);

Cliente de búsqueda

El cliente de búsqueda se configura en la función getNewSearchClient(), que acepta los siguientes parámetros:

  • id: Identificador para el cliente
  • distinct: Indica si se deben agrupar resultados
  • additionalSearchParameters: Parámetros adicionales para la búsqueda
  • sortOptions: Opciones de ordenamiento
export const getNewSearchClient = function (id, distinct = false, additionalSearchParameters = {}, sortOptions = false) {
// Configuración del cliente...
// Ver archivo original para detalles
}

Configuración del servidor

server: {
apiKey: process.env.NEXT_PUBLIC_TYPESENSE_READONLY_API_KEY,
nodes: [
{
host: process.env.NEXT_PUBLIC_TYPESENSE_HOST,
path: "",
port: "443",
protocol: "https",
},
],
cacheSearchResultsForSeconds: 1 * 5, // 5 segundos
}

Parámetros de búsqueda predeterminados

additionalSearchParameters: {
query_by: "name,sku",
group_by: distinct ? "variant_code" : undefined,
group_limit: distinct ? 10 : undefined,
group_size: distinct ? 1 : undefined,
facet_sample_percent: 15,
facet_sample_threshold: 1000
}