【问题标题】:searching with multiple parameters with mongodb使用 mongodb 搜索多个参数
【发布时间】:2013-03-16 14:14:24
【问题描述】:

如何在不使用外部引擎的情况下使用 mongodb 实现细粒度搜索?以这个对象为例 { 类型:“喜剧”, 页数:380, 年份: 2013, 畅销书:真的, 作者:“约翰·多伊” }

以下内容正在搜索:

db.books.find({
  pages:      { '&gt': 100 },
  year:       { '&gt': 2000 },
  bestseller: true,
  author:     "John Doe"
});

到目前为止非常简单。现在假设文档中有更多值,并且我正在进行更精细的搜索并且我有一个非常大集合。

我要做的第一件事是创建索引。但是,它是如何工作的?我读过这里https://jira.mongodb.org/browse/SERVER-3071 中定义的索引交集是不可行的。这意味着如果我将索引设置为“年份”和“页面”,我将不会真正优化搜索中的 AND 操作。

那么如何针对具有许多参数的搜索进行优化?

提前致谢。

【问题讨论】:

    标签: mongodb search indexing


    【解决方案1】:

    您似乎在询问compound indexes in mongodb。复合索引允许您在文档中的多个字段上创建单个索引。通过创建复合索引,您可以在仍然使用索引的同时进行这些大型/复杂查询。

    一般来说,如果您在具有高度选择性的字段上创建基本索引,您的搜索最终会非常快速。使用您的示例,如果您有关于作者的索引,则查询引擎将使用该索引来查找 author == "John Doe" 的所有条目。相对于整个收藏中的书籍数量,大概没有那么多具有特定作者的书籍。因此,即使您的查询的其余部分相当复杂,它也只会对匹配作者的少数文档进行评估。因此,通过正确构建索引,您可以获得显着的性能提升,而无需使用任何复杂的索引。

    【讨论】:

    • 谢谢。不过,我提供的代码只是一个示例。您知道是否有任何工具可以帮助查看频繁查询,从而帮助找到最佳匹配以创建索引?
    • 嗨约翰,我个人不知道任何工具,似乎大多数人通过使用分析器手动找出哪些查询运行缓慢,然后针对这些特定查询优化其索引。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-31
    • 2013-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-31
    相关资源
    最近更新 更多