2016-06-20 16 views
1

私は、商品が主に2つのカテゴリ(非プレミアムとプレミアム)で分割されている電子商取引に取り組んでいます。 1つの製品がプレミアムであるかどうかを判断するために、インデックス処理でブール値を使用しました。Algoliaのブール値に一致する文字列検索

ユーザーが「プレミアム」を検索するたびにプレミアム製品のみが表示されるようにしたいと考えています。

どうすればできますか?

答えて

1

私はこれを行うための回避策を見つけましたが、実際にはそれが私の好きなものではないと言わざるを得ない。

私は基本的に1つの配列に1つのインデックスのすべてのタグのリストを格納し、クエリに書き込まれているものに応じてフィルタを構築します。

// [...] 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

私は行くための最も簡単な方法だと思います – redox

関連する問題