Cercare in un catalogo tecnico: Elasticsearch ed ETIM in Omni-Term

Un installatore che digita «prescomanometer 1/2» vuole una cosa sola: l’articolo giusto, subito. Nello shop B2B di Omni-Term gli installatori cercano per codice articolo, codice fornitore, marca, descrizione o caratteristica tecnica, in un catalogo di molti produttori. Ecco come ho costruito questa funzione di ricerca.

Un solo campo di ricerca, molti tipi di domanda

La query viene prima analizzata. Se il codice riconosce un codice articolo o un codice fornitore, la ricerca passa direttamente alla corrispondenza esatta e con wildcard su quei campi, con il boost più alto. Se riconosce una marca, i prodotti di quella marca hanno la precedenza. Il resto sono termini normali, cercati contemporaneamente su più campi: la descrizione come keyword esatta, come testo analizzato e come edge n-gram per i prefissi, la descrizione del prodotto e la gerarchia, dalla categoria alla famiglia di prodotti. Cercando un vecchio codice articolo si ottiene anche il successore, grazie a un elenco annidato di predecessori.

Prima AND, OR come rete di sicurezza

Con più termini, la query richiede che tutti compaiano nello stesso prodotto. Se i risultati sono troppo pochi, la ricerca ripiega su una variante OR. Così l’utente ottiene precisione dove è possibile e completezza dove serve.

Il problema delle parole composte in olandese

«Installatie» non deve corrispondere semplicemente a «installatiemateriaal». Per questo la query costruisce pattern di confine di parola: il termine all’inizio, alla fine o in mezzo a un campo, oppure dopo un trattino o un punto. Un interruttore stabilisce se sono ammesse corrispondenze all’interno di una parola; precisione e recall si possono così bilanciare caso per caso, come la tolleranza agli errori di battitura (fuzziness).

Boost che si modificano senza deploy

I pesi per campo, dal codice articolo esatto al livello di gerarchia, sono salvati come impostazioni nel database. Un piccolo strumento di amministrazione li mostra raggruppati, valida le modifiche e svuota la cache dell’API. Regolare il comportamento della ricerca richiede così minuti, non release.

ETIM come linguaggio comune

ETIM è lo standard europeo di classificazione dei prodotti tecnici: ogni classe, come «pompa di circolazione», ha caratteristiche fisse con unità e valori. I dati ETIM dei produttori si trovano in un indice Elasticsearch dedicato con analizzatori n-gram e sono collegati tramite il GLN del produttore e il codice fornitore o il GTIN dell’articolo. Questo rende possibili due cose: l’installatore vede le caratteristiche tecniche di un articolo, e i risultati vengono raggruppati per classe ETIM come faccetta per affinare ulteriormente. Il collegamento avviene solo durante l’arricchimento dei risultati, così la ricerca di base resta veloce.

Che cosa ho imparato

  • Misurare con log di ricerca reali. Un elenco di ricerche note con il risultato atteso è il miglior test di regressione.
  • Partire in modo permissivo e aumentare la precisione passo dopo passo. Le regole troppo rigide si vedono solo in ciò che gli utenti non trovano.
  • Documentare il comportamento. Le regole decisionali sono in un documento che evolve insieme alla configurazione. Così del comportamento della ricerca si può discutere con chi lavora al banco.

Cerca una funzione di ricerca migliore per il Suo shop online o il Suo catalogo? Mi contatti.