在我当前的项目中,用户可以like
歌曲,现在我将添加歌曲搜索,以便用户可以搜索她liked
以前拥有的歌曲。
我以前使用xapian
过实现搜索引擎,其中涉及定期建立文档索引。
就我而言,我是否必须独立为每个用户的歌曲建立索引?
如果我希望搜索结果更多real-time
,这是否意味着我需要每隔很短的时间增量构建索引?
在我当前的项目中,用户可以like
歌曲,现在我将添加歌曲搜索,以便用户可以搜索她liked
以前拥有的歌曲。
我以前使用xapian
过实现搜索引擎,其中涉及定期建立文档索引。
就我而言,我是否必须独立为每个用户的歌曲建立索引?
如果我希望搜索结果更多real-time
,这是否意味着我需要每隔很短的时间增量构建索引?
分开回答你的问题。
不; 对于这种情况,一种常用的技术是like
分别用关于歌曲的信息和用户的标识符来分别索引每一个。那么当你搜索时,你想通过实际登录的用户标识符来过滤用户自然文本搜索的结果。
在 Xapian 中,您可以通过添加一个代表用户的术语(带有合适的前缀,因此您可能XU175
对 id 为 175 的用户使用)来执行此操作,然后使用OP_FILTER
将搜索限制为登录用户的喜欢.
这完全取决于您使用的搜索系统。使用 Xapian,您可以这样做并定期将生成的数据库“压缩”成一个基本数据库;或者您可以将实时索引到数据库中——尽管由于 Xapian 是单编写器,您希望找到一种序列化它的方法,例如将新的喜欢放入队列并有一个将它们弹出并索引的进程进入数据库。对此的一种主要现成的解决方案是使用由 Xapian 开发人员之一编写的Restpose,它扮演的角色与Solr为Lucene所做的角色相同。
您还可以通过索引到一个数据库,然后将其复制到另一个并搜索复制的版本来获得更好的体验,这也为您提供了将来水平扩展的选项。Xapian 文档中有关于复制的讨论。