Algolia在Flutter中的手动自动完成

13
我正在使用Algolia在Flutter / Dart中实现索引搜索。我遇到了一个问题,但其实并不是问题。我正在努力弄清楚如何查询自动完成的结果。也就是说,如果我传入“burg”这个词,我应该得到“bacon burger”,“avo burger”等结果。

问题并不在Flutter上,因为我可以在Flutter上实现我想做的任何事情。问题也不在Dart上,因为我很熟悉Dart。问题在于Algolia的文档和如何实现自动完成,如果他们没有为平台提供小部件的话。

我一直在Google一些东西,希望了解以下内容:

  • 我需要传递什么参数来表明我想要的结果是自动完成结果而不是完全匹配的结果。

我正在使用这个插件,并已正确设置实例,因为我可以从Algolia检索到我的索引数据。我正在设置facets并传递facetFilters的值。它对于正常搜索非常有效,但我无法从文档中找到如何调整我的查询,以使其返回潜在匹配项的自动完成结果,而不是实际搜索的结果。

希望这样更清楚。为了使它更清晰。以下是我不需要的内容:

  • 如何设置Algolia(已完成)
  • 如何在Flutter中使用Algolia(已完成)
  • 使用特定的架构使其更容易(已完成)。我只需要添加一个函数来返回自动完成的标题,功能就会工作。
  • 如何构建自动完成小部件(已完成)
  • 基本上不需要Flutter、UI或架构方面的帮助。只需了解如何查询自动完成结果。

我查看了Algolia文档上的查询建议(Query suggestions),但代码并不清晰,无法指导我从Algolia实例中手动获取这些建议。我查看了自动完成js(Autocomplete js),但查询被隐藏起来,至少对于我来说是这样。我还查看了Autocomplete Vue,但没有找到答案。以及其他所有出现的自动完成链接。


2
我有同样的问题,有什么解决方案吗?谢谢! - Álvaro Agüero
你找到解决方案了吗?如果是,请与我们分享。谢谢。 - Abdullah Khan
1个回答

2
这个问题已经存在了很长时间。我猜你可能不再需要它的答案,但考虑到它得到了许多赞,回答它仍然可能是有价值的。
在Algolia的文档中,你要找的行为被称为“前缀匹配”。
控制Algolia中这种行为的主要参数是“queryType”。它接受三个值:prefixLastprefixNoneprefixAll
  1. prefixLast 只将查询的最后一个单词视为潜在前缀。
    所有之前的单词都将作为完整单词进行匹配。
    它非常适合“随输入即时搜索”的体验,并且很可能是您要寻找的值。
    这是此参数的默认值,因此您只需运行client.query("burg")即可获得预期的行为。
    注意:如果最后一个单词后面跟着空格,则不会将其视为前缀。

  2. prefixNone 不将查询的任何单词视为潜在前缀。
    它非常适合传统的“按Enter键 -> 获取搜索结果”体验。

  3. prefixAll 将查询的所有单词都视为前缀。
    这很少是一个好的选择,因为它可能会带来很多误报。
    如果您只想对某些单词(例如“avocado”的“avo”)采用这种行为,我建议使用同义词。

https://www.algolia.com/doc/api-reference/api-parameters/queryType/

这个参数可以在您的索引设置或查询时间中进行更改。

尽管这并没有回答我的问题,但我还是点了赞,因为信息很好。在Dart代码中,我正在执行index.query(myText)并获取搜索结果。速度足够快,但我认为应该有一个特定的函数来执行以获得较小的结果集。我不认为我要找的东西实际上存在。我可能被其他框架实现和函数命名所困惑。 - Filled Stacks
如果您想使用查询类型限制结果集,这是完全可行的。Dart插件通过setQueryType方法公开了queryType,该方法可以在查询上使用。 - Jerska

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接