在我目前的项目中,用户可以like
首歌曲,现在我要添加歌曲搜索,以便用户可以搜索之前有liked
的歌曲。
我之前使用xapian
实现了搜索引擎,这涉及定期构建文档索引。
就我而言,我是否必须为每个用户的歌曲独立构建索引?
如果我希望搜索结果更加real-time
,这是否意味着我需要在短时间内逐步构建索引?
答案 0 :(得分:2)
单独提出问题。
没有;对于这种情况的常见技术是分别用关于歌曲的信息和用户的标识符来索引每个like
。然后,当您搜索时,您希望通过实际登录的用户标识来过滤用户自然文本搜索的结果。
在Xapian中,你可以通过添加一个代表用户的术语来做到这一点(使用合适的前缀,因此对于ID为175的用户可能有XU175
),然后使用OP_FILTER
将搜索限制为登录用户喜欢的内容。
这完全取决于您使用的搜索系统。使用Xapian,您可以这样做,并定期“压缩”生成的数据库到一个基础数据库;或者你可以直接索引到数据库中 - 尽管由于Xapian是单一编写器,你需要找到一种序列化方法,例如将新的喜欢放入队列并使用单个进程弹出它们和索引进入数据库。一个基本上现成的解决方案是使用由{x}开发人员编写的Restpose,其填充Solr与Lucene相同的角色。< / p>
您还可以通过索引到一个数据库,然后将其复制到另一个数据库并搜索复制的版本来获得更好的体验,这也为您提供了将来水平扩展的选项。 Xapian文档中有一个discussion of replication。