2016-06-20 7 views
1

Ich arbeite an einem E-Commerce, wo Produkte hauptsächlich in zwei Kategorien aufgeteilt werden: Nicht-Premium und Premium. Ich habe einen booleschen Wert im Indizierungsprozess verwendet, um festzustellen, ob ein Produkt Premium ist oder nicht.Passende Strings zu booleschen Werten in Algolia Suche

Ich würde gerne machen, wenn ein Benutzer nach "Premium" sucht, nur Premium-Produkte angezeigt werden.

Wie kann ich das tun?

Antwort

1

Ich habe einen Workaround gefunden, aber ich muss sagen, dass es nicht wirklich mein Favorit ist.

Ich im Grunde in einem einzigen Array eine Liste von jedem einzelnen Tag I Index speichern, und ich baue die Filter abhängig davon, was in der Abfrage geschrieben wird.

// [...] code containing the initialization of algolia-client-js 
 

 
var tags = ["premium"]; 
 

 
function formatFilters(parameters) { 
 

 
    var filters = { 
 
    numeric: [], 
 
    tags: [], 
 
    query: parameters.query || "" 
 
    }; 
 

 
    angular.forEach(parameters.ranges, function(value, key) { 
 
    filters.numeric.push(key + ">=" + value.from, key + "<=" + value.to); 
 
    }); 
 

 
    angular.forEach(filters.query.split(" "), function(value, key) { 
 
    if (tags.indexOf(value) > -1) { 
 
     filters.tags.push(value); 
 
     filters.query = filters.query.replace(value, "").trim(); 
 
    } 
 
    }); 
 

 
    return filters; 
 
} 
 

 
filters = formatFilters({ ranges: [], query: "premium iphone" }); 
 
console.log(filters); 
 

 
function search(parameters, clearHits) { 
 
    var index  = client.initIndex(parameters.order.id); 
 
    var builtFilters = formatFilters(parameters); 
 

 
    return index.search(
 
    builtFilters.query, 
 
    { 
 
     numericFilters: builtFilters.numeric, 
 
     tagFilters: builtFilters.tags 
 
    } 
 
); 
 
};
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

+0

Ich denke, das ist der einfachste Weg zu gehen – redox