2017-09-24 143 views
0

我在我的Angular应用程序中有一个功能,其中有一些可搜索的项目存在于我的Algolia数据库中。事情是......他们不能被任何字符串搜索。他们只能通过方面搜索。Javascript 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

从algolia JavaScript客户端的文档,

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

当您的用户从其当前查询中删除字符 以避免无用的API调用时,这特别有用。因为它是 作为简单的JavaScript对象存储在内存中,所以无论何时重新加载页面,缓存都会自动重置为 。

要解决这个你应该使用

index.clearCache()client.clearCache()

了解更多关于内置的缓存系统在这里。
https://github.com/algolia/algoliasearch-client-javascript#cache

+0

什么是优雅的解决方案。我认为是这样的,但是我在文档中找不到它。感谢您对我的帮助:D –

+0

嘿,有一件事很快:我注意到,当我在搜索之前运行我的clearCache函数时,当结果重新加载时,总是需要两次重新加载才能获得更新,就好像重新加载是一个“重新加载”,如果这是有道理的。每次运行搜索功能时,它都会给我旧的结果,以前应该显示重新加载。有什么想法吗? –