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 clientedistinct: Indica si se deben agrupar resultadosadditionalSearchParameters: Parámetros adicionales para la búsquedasortOptions: 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
}