将 post 代码与 Algolia 部分匹配

Partially matching a post code with Algolia

我已将数据集加载到 Algolia 搜索索引中。索引中的每个项目都是一个具有集水区的商店(集水区只是商店涵盖的一组英国邮政编码)。例如:

['DS4 6','DS4 7', 'DS5 8, 'DS6 9' ... ]

搜索功能在一定程度上发挥了作用。如果人们搜索“DS4”,那么 Algolia returns 有几家商店,但大多数人都在输入完整的 post 代码(例如 DS4 8XX),即使“DS4”已编入索引,也不会返回任何内容几次。

Algolia 中是否有搜索单词第一部分的配置,即使一个人 'typed past it'?

进一步澄清这一点。我可以将每个单独的 post 代码存储在一个集水区中,但其中有数百万 和数百万 。完整的英国 post 代码为“DS4 7EN”,因此末尾还有两个字符代表英国的一条街道。我有 post 代码的第一部分:例如“DS4 7”,因为当我只真正关心更广泛的区域时,存储所有内容似乎过多,即:DS4、DS5、CV43、AB2(等等上)。

我还可以使用地点 api 并对地址进行地理编码。但是我已经有了这个集水区post代码数据,所以如果可以的话不使用它似乎很可惜。

与大多数搜索引擎一样,Algolia 支持前缀搜索,以便允许在输入时搜索结果,InstantSearch libraries 利用了这一点,结果在用户输入时实时更新。如果没有前缀搜索,您将不得不等待用户输入整个单词才能显示任何有意义的结果。

在您的例子中,由于对服务区进行了索引,例如 DS4 6,当用户键入 DS4 6XX 时,没有记录会与查询匹配,因为查询充当记录的过滤器基于他们的可搜索属性。

即是说,我看到您可以实施两种可能的解决方法。

第一个解决方案是使用 removeWordsIfNoResults 索引设置并将其设置为“Last Word”。如果没有结果,这将删除查询的最后一个词。例如,对于查询 DS4 6XX 它将删除 6XX 以仅保留 DS4 并检索与该查询匹配的项目。请注意,此解决方案依赖于 DS4 6XX 有两个词(由 space 分隔)并且不适用于 DS46XX.

第二种解决方案是更改记录的结构以在索引的每个项目中添加完整的邮政编码。由于这些是商店,我相信这应该是可能的。这样您的用户将能够搜索完整的邮政编码 DS4 6XX 和集水区 DS4 6。除非我误解了你的问题,否则我认为没有必要存储与集水区相关的完整邮政编码列表。