2016-03-24 17 views
3

Angesichts der folgenden Indizes filtern:Wie von abgeleiteten Facetten in algolia

{ 
    id: 1, 
    distance: [4, 10] 
}, 
{ 
    id: 2, 
    distance: [1, 2] 
}, 
{ 
    id: 3, 
    distance: [9, 10] 
} 

Nach der Aktivierung der Facettierung auf distance können numerische Filter auf sie anzuwenden, möchte ich eine zusätzliche Filterung auf einer abgeleiteten Attribut anzuwenden, die ich Ruf distance_range an. Es leitet seinen Wert durch eigene Logik auf einem vorhandenen Attribut zum Beispiel:

// In JS: 
distance_range: Math.floor((distance - 0.5)/5) * 5 + "-" + Math.ceil((distance)/5) * 5 

der jede Distanz Zahl in einen Bereich verwandeln würde „0-5“, „5-10“ usw.

{ 
    id: 1, 
    distance: [4, 10], 
    distance_range: ["0-5", "5-10"] 
}, 
{ 
    id: 2, 
    distance: [1, 2] 
    distance_range: ["0-5"] 
}, 
{ 
    id: 3, 
    distance: [9, 10] 
    distance_range: ["5-10"] 
} 

Wie kommt man am besten zu einem solchen Index? Muss ich die Daten vorher verarbeiten, oder hat Algolia eine solche Funktion, um Attribute im laufenden Betrieb zu transformieren?

Antwort

3

Algolia verwendet eine benutzerdefinierte Datenstruktur, um Ihre Daten zu indizieren, um Ergebnisse so schnell wie möglich zu liefern.
Der Wiederaufbau eines Index in Echtzeit wäre zu lang, um eine Antwort zu erhalten, weshalb, auch für die Sortierung, Algolia requires you to duplicate your data into multiple indices.

Wenn Sie nur das neue Attribut für die Anzeige berechnen müssten, wäre es definitiv mit Front-End-Logik erreichbar, sowohl autocomplete.js als auch instantsearch.js haben eine Methode, um die Daten vor der Anzeige zu transformieren.

Da Sie jedoch darauf filtern möchten, benötigt Algolia diese Informationen in der Datenstruktur, so dass Sie diese Berechnung vorher durchführen müssen.
Vergessen Sie auch nicht, dieses neue Attribut zu hinzuzufügen.