我需要Algolia总是从全文搜索中返回5个结果,即使查询文本本身与实际返回的结果几乎没有关联。在有人建议之前,我已经尝试将removeWordsIfNoResults
选项设置为所有可能的模式,这仍然不能保证我得到我的5个结果。
这样做的目的是创建一个相关的实体'侧栏,其中当前实体的名称用于搜索其他实体。
有什么建议吗?
答案 0 :(得分:4)
使用removeWordsIfNoResults=allOptional
查询参数确实是一个很好的方法 - >因为默认情况下所有查询字都需要匹配一个对象,如果查询字(或单词组合)不匹配,后退为“可选”是一种很好的方法来检索结果任何东西。
index.search(query, { removeWordsIfNoResults: 'allOptional' });
另一个解决方案是始终将所有查询字视为可选(不仅仅是作为后备);确保查询foo bar baz
被解释为OPT(foo) AND OPT(bar) AND OPT(baz)
< => foo OR bar OR baz
。不同之处在于此查询将检索比上一个更多的结果,因为1个匹配的单词足以检索该对象。
index.search(query, { optionalWords: query });
话虽如此,没有办法强迫引擎检索“至少”5个结果。我建议的是有一个小的前端逻辑:
- 使用removeWordsIfNoResults
或optionalWords
进行查询
- 如果引擎返回少于5个结果,请执行另一个查询