sha*_*sco 12 architecture search-engine text-search inverted-index
早在2012年,我正在构建个人在线应用程序,并且实际上想要重新发明轮子,因为我天生好奇,出于学习目的并提高我的算法和架构技能.我可以使用apache lucene和其他人,但正如我所提到的,我决定建立自己的迷你搜索引擎.
问:除了使用elasticsearch,lucene等可用服务之外,真的没有办法增强这种架构吗?
我正在开发一个Web应用程序,用户在其中搜索特定的标题(例如:book x,book y等),这些数据位于关系数据库(MySQL)中.
我遵循的原则是,从db中获取的每条记录都缓存在内存中,以便应用程序对数据库的调用较少.
我开发了自己的迷你搜索引擎,具有以下架构:
这是它的工作原理:
系统工作正常,但我有两个主要问题,我找不到一个好的解决方案(过去一个月一直在尝试):
第一个问题:
如果你检查点(B),情况没有查询"历史"被发现,它必须使用像%%声明:此过程变得时间当查询数据库(而不是一个或匹配许多纪录消耗二):
第二个问题:
应用程序允许用户添加自己的新记录,这些记录可以立即被登录到应用程序的其他用户使用.
然而,为了实现这一点,必须更新反向索引映射和表"查询",以便在任何旧查询与新单词匹配的情况下.例如,如果添加了新记录"woodX",旧的查询"wood"仍会映射到它.所以为了重新勾选查询"wood"到这个新记录,这就是我现在正在做的事情:
- >现在,如果远程用户搜索"wood",它将从内存中获取:wood和woodX
这里的问题也是时间消耗.将所有查询历史(在表查询中)与新添加的单词匹配需要花费大量时间(匹配查询越多,时间越多).然后内存更新也需要很多时间.
什么,我想这样做来解决这个问题的时候,就是返回了预期的结果,用户第一,然后让应用程序发布一个AJAX所要求的数据呼叫,实现所有这些更新任务.但我不确定这是一种不良做法还是一种不专业的做事方式?
所以在过去的一个月(多一点)我试着想到这个架构的最佳优化/修改/更新,但我不是文档检索领域的专家(实际上它是我的第一个迷你搜索引擎).
我将非常感谢能够实现这种架构的任何反馈或指导.
提前致谢.
PS:
我强烈推荐 Sphinx Search Server,它在全文搜索方面得到了最好的优化。访问http://sphinxsearch.com/。
它设计用于与 MySQL 一起使用,因此它是您当前工作区的补充。