Javascript Algolia - 如何使用空搜索字符串发起新搜索?

时间:2017-09-24 11:18:17

标签: javascript angularjs algolia

我的Angular应用程序中有一项功能,我在Algolia数据库中有一些可搜索的项目。事情是......他们不能用任何字符串搜索。它们只能通过方面进行搜索。

问题是,当我用一个空字符串+我的搜索过滤器/ facets运行我的初始.search()函数时,我得到一个返回的列表,一切都很好,花花公子。但是,当我再次运行该函数来刷新列表时,它只会返回相同的结果,实际上从不会触发新请求,除非我更改其中一个过滤器/方面。

有没有办法随时强制搜索查询,而无需指定“新”搜索条件?

这是我的搜索功能:

searchForAuditions() {

    // Setup the filters/options
    let options = {
      highlightPreTag: '<span class="highlighted">',
      highlightPostTag: '</span>',
      hitsPerPage: 10,
    };

    // Add clause to make sure "is_deleted" is false
    let isDeleted = ` is_deleted: "false"`;

    let facets = `${isDeleted}`;

    // Replace all trailing spaces and split it into an array
    let facetWords = facets.replace(/\s+$/, '').split(" ");

    // Remove trailing "AND"
    if((facetWords[facetWords.length - 1] === "AND") || (facetWords[facetWords.length - 1] === "OR")) {
      facetWords.splice(-1, 1);
      facets = facetWords.join(' ');
    }

    if(facets) {
      options['filters'] = facets;
    }

    this.auditionsIndex.search('', options).then(result => {
      this.results = result.hits;
    })
  }

提前致谢!

1 个答案:

答案 0 :(得分:1)

来自algolia JavaScript客户端文档,

  

为避免执行相同的API调用,搜索结果将存储在将与JavaScript客户端和索引对象绑定的缓存中。 每当调用特定查询(和过滤器)时,我们都会将结果存储在本地缓存中。如果您再次调用完全相同的查询,我们会从缓存中读取结果,而不是进行API调用。

     

当您的用户删除字符时,此功能特别有用   从他们当前的查询,以避免无用的API调用。因为它是   作为一个简单的JavaScript对象存储在内存中,缓存是   重新加载页面时自动重置。

要解决此问题,您应该使用

index.clearCache()client.clearCache()

在此处阅读有关内置缓存系统的更多信息 https://github.com/algolia/algoliasearch-client-javascript#cache