解决查询中 运行-on 标记的搜索不佳问题

Resolving a poor search on run-on tokens in a query

我的一个小个人项目是在不使用任何外部资源的情况下盲目地从头开始制作一个搜索引擎。这主要是为了学习经验,直到现在我都没有遇到太多麻烦,我既有进退两难的问题,也有棘手的问题。

观察这个案例:

Suzy 想要搜索 "fuzzy bears"。这很好,功能也很好。但是,Suzy 搞砸了并键入 "fuzzybears"。现在,我的搜索算法崩溃了,因为它被解释为单个标记,而不是多个标记。 运行 在术语或粘附标记中出现一次的任何情况或单词组合都会导致搜索结果不佳。

对于范围,这是我使用 C# 和 T-SQL 的组合编写的内容。

我尝试了多种解决方案,但没有任何结果。首先,我使用一个列表来获取术语并创建变体,但这对我来说太慢了,而且需要的内存比我认为应该需要的要多得多。

我想将搜索查询保存到数据库中以供统计,也许可以了解更多有关算法有机增长的信息,因此在 SQL 中处理这些粘附标记的方法可能是一种解决方案,但我有除非我使用游标或其他一些缓慢的解决方案,否则不知道如何从类似的开始。

我可以进行搜索,将它们保存到我的数据库中,创建不同的组合,其中一些标记被粘合,然后将这些粘合的标记作为搜索词?这个解决方案的问题是它占用了相当多的 space 并且我不会总是需要这些字符串,因为像这样的拼写错误并不常见。

主要是我需要的是速度。它不一定非常漂亮,但如果它又快又准,那么即使占用大量磁盘我也很高兴space。

不在这里寻求解决方案,但如果有人能指出我可以去的方向,或者将不胜感激。

考虑这种方法:因为空格、标点符号和任何类似的东西都会搞砸像这样的搜索,删除所有这些,转换为常见的大小写(我更喜欢小写,但选择你喜欢的),然后标记化基于音节,使用与连字英语单词大致相同的一组划分规则。

因此,要搜索包含 "Consider this approach:" 的答案,您可以将短语缩减为 "considerthisapproach",然后标记为 "con"、"sid"、"er" ,"this","ap","proach"。如果 con 和 sid 和 er 彼此相邻出现,并且按此顺序,您就找到了单词 "consider".

这种方法也适用于统计匹配,例如如果至少 85% 的音节按正确顺序找到,您认为它是接近匹配,并且可能按匹配百分比对结果进行排序,以便更有意义的匹配位于顶部。