在 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>