我的一个小小的个人项目是在不使用任何外部资源的情况下盲目地从头开始生成搜索引擎。这主要是为了学习经验,直到现在我还没有遇到什么麻烦,我既有困境也有困难。
观察此案例:
Suzy想要搜索"模糊熊"。这很好,功能也可以。然而,Suzy搞砸了并且键入了#34; fuzzybears"。现在,我的搜索算法崩溃了,因为它被解释为单个令牌,而不是多个令牌。任何案例或单词组合甚至在术语上出现过一次这样的运行,或者胶合代币都会导致搜索结果不佳。
对于范围,我正在使用C#和T-SQL的组合编写。
我尝试了多种解决方案,但实际上没有任何解决方案。首先,我使用List来获取术语并创建变体,但这对我来说太慢了,并且需要比我认为应该需要的更多的内存。
我想将搜索查询保存到数据库以获取统计信息,也许还想了解有关有机增长算法的更多信息,因此在SQL中处理这些粘合标记的方法可能是一种解决方案,但我不知道如何开始除非我使用光标或其他缓慢的解决方案。
我可以进行搜索,将它们保存到我的数据库中,创建不同的组合,其中一些标记被粘合,然后将那些粘合的标记作为术语来点击?这个解决方案的问题是它占用了相当多的空间,我不会总是需要这些字符串,因为像这样的拼写错误并不常见。
主要是,我需要的是速度。它并不一定非常漂亮,但如果它快速而准确,那么即使占用大量磁盘空间,我也很高兴。
这里没有要求解决方案,但如果有人能指出我可以去的方向,或者会非常感激。
答案 0 :(得分:1)
考虑这种方法:因为空格,标点符号和任何类似的东西会搞砸这样的搜索,删除所有这些,转换为常见的情况(我更喜欢小写,但选择你喜欢的),然后基于的标记化音节,使用与连字符英语单词大致相同的分组规则。
因此,要搜索包含“考虑此方法:”的答案,您将短语缩减为“考虑到此方法”,然后将其标记为“con”,“sid”,“er”,“this”,“ap”, “proach”。如果con和sid和er彼此相邻,并且按照这个顺序,你就找到了“考虑”这个词。
这种方法也适用于统计匹配,例如,如果以正确的顺序找到至少85%的音节,你认为它是一个接近的匹配,并且可能按匹配%对结果进行排序,因此更有意义的匹配位于顶部。