在 Algolia 搜索中将字符串与布尔值匹配
Matching strings to boolean values in Algolia Search
我从事电子商务工作,产品主要分为两类:非高端和高端。我在索引过程中使用了一个布尔值来确定一种产品是否优质。
我希望每当用户搜索 "premium" 时,只显示高级产品。
我怎样才能做到这一点?
我找到了解决方法,但我必须说这不是我最喜欢的方法。
我基本上将我索引的每个标签的列表存储在一个数组中,并根据查询中写入的内容构建过滤器。
// [...] 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>
我从事电子商务工作,产品主要分为两类:非高端和高端。我在索引过程中使用了一个布尔值来确定一种产品是否优质。
我希望每当用户搜索 "premium" 时,只显示高级产品。
我怎样才能做到这一点?
我找到了解决方法,但我必须说这不是我最喜欢的方法。
我基本上将我索引的每个标签的列表存储在一个数组中,并根据查询中写入的内容构建过滤器。
// [...] 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>