【问题标题】:Sorting by a hash value with Solr / Sunspot使用 Solr / Sunspot 按哈希值排序
【发布时间】:2013-02-08 16:13:40
【问题描述】:

我有一个使用 Sunspot 访问 Solr 的 RoR 应用程序。所有最新版本。

我的索引文档有一个散列,其中键是 user_id,值是用户第一次看到文档的时间。

如何按用户的日期值对搜索结果进行排序?由于涉及的数据量,我希望在 Solr 而不是在 RoR 中完成此操作 - 将所有结果拉入只是为了在 RoR 中进行排序不会很漂亮。

这在 Solr 中是否可以原生实现?如果是这样,太阳黑子也能处理吗?

【问题讨论】:

    标签: ruby-on-rails sorting solr sunspot


    【解决方案1】:

    在 Solr REST API 中,要按时间字段排序,您只需添加一个 sort 查询参数。例如,如果您想按用户 ID 的 1、2 和 3 访问文档时进行排序,您可以发出如下查询 http://localhost:8983/solr/CORE/select?q=user_id:(1 OR 2 OR 3)&sort=timefield desc 解决。

    我不知道黑子或红宝石,但看看http://sunspot.github.com/ 的搜索示例,我想你可以做某事。像这样?

    Post.search do
      user_id '1 OR 2 OR 3'
      order_by :timefield, :desc
    end
    

    【讨论】:

    • 问题是每个用户都有自己的访问时间,我需要为有问题的特定用户按该值排序。我看不出这个解决方案如何满足我的要求。
    • 我不知道您实际上可以将哈希作为字段存储在 solr 文档中。我以为你只能存储简单类型,如 int、float、string、text 和多值字段?我误解了你的qn。我很好奇,你能告诉你如何在文档中存储哈希吗?
    • 我认为你是对的。知道如何根据每个文档中的每个用户属性对每个用户进行不同的排序吗?
    • 您可以使用动态字段 (wiki.apache.org/solr/SchemaXml#Dynamic_fields)。你可以有一个像accesstime_* 这样的动态字段并将accesstime_USERID 存储在每个文档中,然后对其进行排序。但请注意,对动态字段进行排序会很快填充不可配置的 fieldCache,并且您将很快开始出现内存不足异常(请参阅我在这里遇到的问题:stackoverflow.com/questions/13393248/…)。
    猜你喜欢
    • 2010-10-20
    • 1970-01-01
    • 2014-10-27
    • 2019-09-27
    • 2016-11-21
    • 2011-07-07
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多