我有一个包含apache日志数据的elasticsearch索引。这是我想要做的:在Elasticsearch中创建我的数据子集的最佳方式是什么?
- 确定访问某个文件(例如/signup.php)的所有访问者(通过ip号码)。
- 请在我的数据的搜索/查询/汇聚,但限制进行考察,以包含IP号的第1步中
发现在SQL世界的文件,我只是想创建一个临时表并从第一步插入所有匹配的IP号码。接下来,我会查询我的主表并通过加入我的临时表中的IP号码来限制结果集。
我明白在elasticsearch中连接是不可能的。该elasticsearch documentation提出一些方法来处理这样的情况:
- 应用方面加入
这似乎并不现实,因为IP号码列表可能会非常大,它似乎效率不高送结果传递给客户端,然后在一个巨大的条件过滤器中将其传回给elasticsearch。
- 非规范化的数据
- 嵌套的对象和/或父 - 子关系
这将涉及遍历匹配的IP号码和在用于与类似“in_group”任何给定的IP号码的索引更新的每个文档:真的,所以我可以在以后的查询中使用它。这似乎也是非常不切实际和低效的,特别是因为源查询(步骤1)是动态的。
我不知道如果与嵌套对象动态创建新文档是在这种情况下实际的。在我看来,我最终会复制大量的数据。
我是elasticsearch和noSQL的新手,所以也许我只是以错误的方式来看问题,我不应该试图首先模拟一个JOIN。
但是这似乎是分割数据集的一种常见情况,这让我想知道我是否忽略了其他一些明显的做法?
任何帮助,将不胜感激!
我不认为它应该成为答案,但是,是的,只要我能理解你的问题,你就必须使用应用端连接。对Elastic来说不应该太重(尤其是如果你使用过滤器,而不是查询来获取IP) –