列出最受欢迎的搜索短语

时间:2014-06-22 04:07:13

标签: ruby-on-rails ruby-on-rails-4

我做了一个应用程序,用户可以在搜索框中搜索文章,现在我想制作一些列表,看看哪些是最受欢迎的搜索短语/单词。什么是最方便的解决方案。

我唯一能想到的就是这样简单:

create_table "searches", force: true do |t|
  t.string   "phrase"
  t.integer  "count"
  t.datetime "created_at"
  t.datetime "updated_at"
end

因此,每当用户键入单词时,我会查看所有用户以前的搜索列表,如果找到单词,则计数器会增加1。如果我没有找到短语,则将其添加到值为count = 1的表中。\

问题是这对我看起来效率低下,因为像“汽车”这样简单的用户可以键入许多不同的变体,如“蓝色汽车”,“红色汽车”,“宝马汽车”等。随着用户名单的增加,名单会增长以指数方式,通过整个列表找到某个短语并增加该计数器真的很慢。

任何想法如何处理这个问题?

1 个答案:

答案 0 :(得分:0)

<强> Redis的

您最好使用第三方半持久数据存储;通常Redis对此进行排序

基本上,当您在应用上收到搜索请求时,您应该让操作执行以下两项操作:

  
      
  1. 使用搜索工具(直接ping数据库,或使用像Solr这样的东西)
  2.   
  3. 发送查询字符串&amp;约会到Redis
  4.   

Redis是key / value数据对存储;这意味着它将使您能够保存简单的数据位以备将来使用。 Redis的典型案例包括存储投票模式(对于像SO这样的网站),存储用户跟随(在社交网络上)以及存储累积视图等。

您应该调查的原因是,不是严重依赖您的数据库,而是提供第三方资源来存储较小的数据块,这将使您的应用更加modular,从而提高效率

-

搜索

有关搜索字词规范的问题最好通过某种关联来解答(可能会引用评论中的tag列表)

如果您让所有搜索字词都通过&#34;裸体&#34; (没有任何预先关联的I.E),您可能会得到随机数据的混合。一个更好的方法是&#34; group&#34;某种程度上的数据。我没有任何相关经验,但我会使用Redis存储搜索字词,然后在插入数据库之前使用group