【问题标题】:Mongo text index doesn't finish when nothing is returned未返回任何内容时,Mongo 文本索引未完成
【发布时间】:2017-01-10 15:30:00
【问题描述】:

我不确定我是否有合适的词汇来描述我所承受的错误。

这是我收藏中文档的一般架构

{
   _id: ObjectId(),
   name: String,
   business: String,
   address: {
      search_type: Character,
      address: String,
      city: String,
      state: String,
      zip: Number
   }
}

我想根据 address.search_type 进行搜索,因此我为我的集合中的这些字段创建了一个文本索引。

{ 
  v: 1,
  key: { _fts: 'text', _ftsx: 1 },
  name: 'address.search_type_text',
  ns: 'admin.customer',
  default_language: 'none',
  weights: { 'address.search_type': 1 },
  language_override: 'language',
  textIndexVersion: 3 
}

现在我知道我的数据实际上应该只有 C、G 或 T 作为搜索类型,当我使用支持的 search_types 之一对此集合运行查找查询时,查询运行良好。

db.collection('blah').find({'address.search_type':'C'}).limit(10).toArray(function(err, result){
    if(err) console.log(err);
    else console.log(result[0]);
    db.close();
});

但是当我使用应该返回 0 个文档的 address.search_type 运行此查询时,我的查询要么永远不会完成,要么会超时。

db.collection('blah').find({'address.search_type':'Z'}).limit(10).toArray(function(err, result){
    if(err) console.log(err);
    else console.log(result[0]);
    db.close();
});

为什么我的查询在应该有 0 个文档时无法完成运行/超时,但在它可以找到文档时却可以正常工作?

【问题讨论】:

    标签: node.js mongodb mongodb-indexes


    【解决方案1】:

    在尝试了不同类型的索引之后,我意识到我根本不需要文本索引。

    这可能是一个令人尴尬的错误,但是我刚刚开始学习mongodb 等等。

    无论如何,我意识到我需要做的就是在 address.search_type 上创建单个字段索引。

    { v: 1,
      key: { 'address.Search_Type': 1 },
      name: 'address.Search_Type_1',
      ns: 'admin.customer' 
    }
    

    由于我将语言设置为无,我仍然不能完全确定为什么文本索引不起作用,但我只需要一个索引是有道理的。

    我认为文本索引主要用于在较大的文本块中搜索短语或关键字。因此,我的搜索正在寻找单个字符这一事实可能会导致问题,因为这不是文本索引的用途。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-22
      • 1970-01-01
      • 1970-01-01
      • 2022-01-15
      • 2014-08-11
      • 2021-08-10
      相关资源
      最近更新 更多