Elaticsearch是否适用于单词少的文档

时间:2019-03-10 18:05:17

标签: elasticsearch lucene

我了解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项考试中的每一项,有多少学生通过了考试(一名学生通过考试意味着他/她完成了考试中的所有问题)

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

1 个答案:

答案 0 :(得分:1)

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

您这里需要的另一个优点是向外扩展(弹性)。但是-有很多选择。您可以使用Facebook所做的MySQL生活来自己实现分片(另请参见here),也可以使用当今可用的许多其他选项之一:redis,Spark,BigQuery,Redshift,Cassandra,(MongoDB?),Hadoop。