elasticsearch - 在类似Reddit的系统中在Elasticsearch中存储投票的最佳方法

标签 elasticsearch

我正在使用Elasticsearch建立一个类似于reddit的网站,并试图确定在哪里存储上/下票的最佳位置。我可以想到几个选择。

  • 作为文档的一部分存储。
    在这种情况下,任何投票都会触发文档的更新。根据elasticsearch文档,这实际上是整个文档的替代。这似乎是一个非常昂贵的操作。
  • 存储在另一个数据库中。
    将选票存储在其他数据库(例如SQL / MongoDB)中,并定期更新elasticsearch。在这种情况下,我们必须忍受新选票影响搜索结果的延迟,这不是那么理想,而且还会增加复杂性和维护成本。
  • 存储在Elasticsearch的另一个索引中
    这可以按索引区分关注点-一个主要是RO,一个RW。有没有一种有效的方法来合并两个索引,以便我可以在查询时按票排序?

  • 对这些选项或其他更好的方法有什么建议吗?

    最佳答案

    有第四种选择-将选票存储在类型不同但与原始文档索引相同的单独文档中。投票类型可以设为文章类型的child。通过此设置,您可以使用has_child过滤器和查询同时对文章和投票进行查询。每次投票时,它也只需要对小票证文件重新索引,而不是大文章文件。不利的一面是,has_childhas_parent查询需要将父/子映射加载到内存中,因此与您描述的所有其他选项相比,这种方法的内存占用非常小。

    关于elasticsearch - 在类似Reddit的系统中在Elasticsearch中存储投票的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29201114/

    相关文章:

    elasticsearch - 用于匹配 BoolQuery 中提供的任何条件的弹性查询

    ruby-on-rails - 如何在新的 Nitrous.io IDE 上设置 SearchKick/ElasticSearch?

    c# - 使用 NEST 的 ElasticSearch 索引/插入失败

    elasticsearch - 如果类型条件不起作用,则为Logstash

    elasticsearch - 使用NEST的日期范围搜索不会返回数据

    mysql - 无法将mysql数据导入elasticsearch

    python-3.x - 包含 GeoPoint 的位置列表 - (geo_spatial_filter_fields, geo_distance)

    elasticsearch - 使用 _id 更新文档elasticsearch

    java - 如何使用 simple_query_string 中的 "*"获取elasticsearch索引中的所有文档

    elasticsearch - 在 Elasticsearch 中的多个字段中使用多个参数进行搜索