elasticsearch - Elaticsearch 对单词少的文档有好处吗
问题描述
我了解 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 秒内完成。
给定一个学生子集(可能是 100,000 个学生,这个子集可以是任意的,因此不能提前标记),并给定一个测试,找出测试中的每个问题,学生的数量正确的。
给一部分学生,对于 1000 个测试中的每一个,有多少学生通过了测试(一个学生通过测试意味着他/她正确地完成了测试中的所有问题)
如果您有有助于搜索的建议,我们可以重新排列文档格式。
解决方案
您可以使用 ElasticSearch (ES),但这太过分了。为什么?ES 的主要优点是您在这里不需要的反向索引(和解析)。
您在这里需要的另一个优势是横向扩展(弹性)。但是 - 有很多选择。您可以使用 Facebook 所做的 MySQL life 为自己实现分片(另请参阅此处),或使用当今可用的众多其他选项之一:redis、Spark、BigQuery、Redshift、Cassandra、(MongoDB?)、Hadoop。
推荐阅读
- node.js - 使用 MongoDB Atlas 和 mongoose 进行慢速查询
- sql-server - 如何使用 Django 在不刷新的情况下更改页面数据
- javascript - 尝试遍历对象并将结果附加到 DOM 元素以创建网格
- oracle - 获取 java.sql.SQLRecoverableException: IO Error: General SSLEngine problem when using Talend with Autonomous Data Warehouse
- javascript - 使用 paper.js 的角度渐变 SVG
- html - 如何删除我的部分标签顶部的空间
- vue.js - 在 CPanel 上部署 Nuxtjs
- kubernetes - kubernetes/ingress-nginx 创建大量同步事件
- javascript - “在新标签中打开”单击链接未打开 href 值
- dask - 从远程 ssh 服务器读取图像到 dask 数组