【发布时间】:2013-02-28 15:26:08
【问题描述】:
我正在做一个客户可以发送自定义数据的应用程序,并且这个自定义数据应该是“可查询的”,我的意思是客户可以搜索这些字段。
为以下用户发送的数据:
data = {
name: "Thiago",
id: 2093
country: "Portugal",
custom_data: {
company: "foo",
plan: "pro",
department: "it",
sessions: 203
}
}
由于应用程序无方案的要求,我们正在使用 mongoDB 来持久化数据。
但是,我想知道如何查询这些自定义数据?我们没有这些字段的索引,并且有很多文档 ~ 1.3M。
我认为使用 elasticsearch 我们可以处理这个要求,但是有没有不使用它的好方法?只使用 mongodb 吗?
一个查询示例可能是:
查找所有来自葡萄牙的信息,并拥有 100 多个登录信息。
提前致谢
【问题讨论】:
-
您有任意文档和任意查询?如果是这样,那么每次执行查询都会很慢,因为每个文档都需要扫描。即使所有内容都在内存中,不幸的是,如果没有索引,这也不会快速或高效。
-
@WiredPrairie 对。我使用弹性搜索来索引我的文档。每个租户都会在 ES 中拥有自己的索引。我想知道这种方法是否正确,您怎么看? elasticsearch 是这种场景的好方法吗?
-
鉴于您需要数据类型 (>100) 并且您不能为每个组合创建索引(因为每个集合最多有 64 个索引,建议定期保持在 16 以下),我可以没有看到在 MongoDB 中对此进行建模的有效/合乎逻辑的方法。可能有,但不是很明显。
-
@WiredPrairie 是的!将 ES 与自定义字段的自动映射一起使用怎么样?这样,我认为比为所有字段创建一个索引/组合要好得多。
-
我从未使用过 ES,因此无法提供任何指导。
标签: mongodb full-text-search elasticsearch