【问题标题】:Is Elaticsearch good for documents with few wordsElaticsearch 对单词少的文档有好处吗
【发布时间】:2019-03-10 18:05:16
【问题描述】:

我了解 Lucene/Elastisearch 搜索的基本概念,即通过从文档中的文本解析的单词构建反向索引。

试图找出 Lucene/ElasticSearch 是否适用于以下场景,因为在文档中没有太多“单词”需要解析,因此无法从中进行反向索引。

有数百万学生,每个学生可以选择参加一小部分测试(目前学生可以选择一千种不同的测试),每个测试可能包含 100 个问题。我们希望通过以下文档跟踪学生的表现

{
    "studentId": <a number>,
    "testId": <a number, ranging from 1 to 1000>,
    "results": [
        "R", "W", "N", .... 
    ]
}

对于每个学生和他/她参加的每项测试,测试中 100 道题中每道题的结果。结果可能是“R”(正确)、“W”(错误)、“N”(跳过)。我们允许学生重新测试他/她跳过的问题,因此需要更新文档。

我们可能需要运行的搜索包括以下内容,我们希望搜索在 1 或 2 秒内完成。

  1. 给定一个学生子集(可能是 100,000 个学生,这个子集可以是任意的,所以不能提前标记),给定一个测试,找出测试中每个问题的数量学生做得对。

  2. 给出一个学生子集,对于 1000 个测试中的每一个,有多少学生通过了测试(一个学生通过测试意味着他/她正确地完成了测试中的所有问题)

    如果您有有助于搜索的建议,我们可以重新排列文档格式。

【问题讨论】:

  • 使用elasticsearch,你有更多的优势可以找到你现在知道的ID,所以试着匹配一些东西。但据我了解,您已经有了要查找的文档的 ID,因此没有真正的搜索,因为您已经知道在哪里查找。所以我认为 elasticsearch 有点矫枉过正,你最好使用一些类似的 postgres oder smt。
  • @RichieK SQL db 在表的潜在大小和我们需要执行的搜索类型方面存在自己的问题。我只是在这里发布它,以了解使用 Lucene/ElasticSearch 是否可行。如果它可以解决问题,那么矫枉过正:-)

标签: elasticsearch lucene


【解决方案1】:

您可以使用 ElasticSearch (ES),但它有点矫枉过正。为什么? ES 的主要优点是您在这里不需要的反向索引(和解析)。

您需要的另一个优势是横向扩展(弹性)。但是 - 有很多选择。您可以使用 Facebook 所做的 MySQL life 为自己实现分片(另请参阅 here),或者使用当今可用的许多其他选项之一:redis、Spark、BigQuery、Redshift、Cassandra、(MongoDB?)、Hadoop。

【讨论】:

  • 使用 MySQL 进行分片是一个有趣的想法。但是,如果我们将来添加更多字段,ElasticSearch 似乎确实具有灵活性和可扩展性。我在这里发布它,看看它是否可行,并征求一些经验。谢谢。
  • 嗯,ElasticSearch 并不是真正有弹性的——不像 Spark。为什么?您可以添加节点,但您必须等待漫长的重新平衡。顺便说一句 - 您是否已经有 10 万学生,或者这是为了未来的增长?
  • 冗长的重新平衡不好,但也没有取消资格。我们必须假设从第一天起就有 1 毫米的学生。
猜你喜欢
  • 2012-09-10
  • 1970-01-01
  • 1970-01-01
  • 2016-10-02
  • 2013-04-21
  • 2016-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多