当前位置: 首页 > 面试题库 >

在MongoDB和Mongoose中执行全文搜索的最佳方法

况浩邈
2023-03-14
问题内容

几天以来,我一直在Google上进行搜索,并且尝试了很多操作,但是仍然无法对用户集合执行良好的全文本搜索。

我尝试了ElasticSearch,但几乎无法查询和分页…

我尝试了许多用于Mongoose的插件,例如ElMongo,mongoose-full-
text,Mongoosastic等。每个人的文档都非常糟糕,我不知道如何执行良好的全文本搜索。

因此,我的收藏是普通收藏:

user = {
  name: String,
  email: String,
  profile: {
    something: String,
    somethingElse: String
  }
}

我在一个简单的页面中有一个搜索输入POST,如果输入的hello world话,我需要在整个集合字段中搜索搜索查询的匹配词并获取结果。

还有很多选项可以处理分页,例如每页10个项目等等。

实现此目标的最佳解决方案是什么?我在Mongoose,NodeJS和ExpressJS中使用MongoDB 2.6。*。

谢谢。


问题答案:

您可以将文本索引添加到Mongoose架构定义中,使您可以$textfind查询中使用运算符来搜索文本索引中包含的所有字段。

创建索引以支持文本搜索,例如nameprofile.something

var schema = new Schema({
  name: String,
  email: String,
  profile: {
    something: String,
    somethingElse: String
  }
});
schema.index({name: 'text', 'profile.something': 'text'});

或者,如果要在索引中包括所有字符串字段,请使用'$**'通配符:

schema.index({'$**': 'text'});

这将使您能够执行分页文本搜索查询,例如:

MyModel.find({$text: {$search: searchString}})
       .skip(20)
       .limit(10)
       .exec(function(err, docs) { ... });

有关更多详细信息,请阅读完整的MongoDB Text
Indexes
文档。



 类似资料:
  • 我的mongoDB中有这种数据 这里假设我做一个查询 这给了我她的结果,但我有名字“nna”或名字“Ana”或名字“anna”或任何其他组合。那么,如何使用Mongoose获取MongoDB中字符串的最接近值呢

  • 带有Mongoose的MongoDB(3.2.0) 收藏: 用户 null 查询: =>找到 =>找到(搜索大小写敏感为false) =>找到(使用diacriticSensitive搜索为false) =>找到(部分搜索) =>未找到(部分搜索) =>未找到(部分搜索) 你知道为什么我用查询“Leo”或“L”得到0个结果吗? null

  • 问题内容: Mongo和Java专家。我们的团队决定使用最近在MongoDB中引入的全文本搜索API。但是,我们发现使用Java MongoDB驱动程序执行命令有些困难。 这是我正在使用的代码: 这是我打印时得到的 问题答案: 摘自Google网上论坛(https://groups.google.com/forum/?fromgroups#!topic/mongodb- user/7jWUbunU

  • 问题内容: 我正在尝试编写一个小型节点应用程序,该应用程序将搜索并解析文件系统上的大量文件。为了加快搜索速度,我们尝试使用某种类型的map reduce。该计划将是以下简化方案: Web请求带有搜索查询 启动3个进程,每个进程分配1000个(不同)文件 进程完成后,它将“返回”结果回到主线程 一旦所有进程完成,主线程将通过返回组合结果作为JSON结果来继续 我对此有以下疑问: 这在Node中可行吗

  • 我是sparql的新手,我正在尝试在其中一个属性中搜索一个单词。简单的查询工作良好,但我不知道如何执行全文搜索。我在jena网站上看到了这个例子:

  • 问题内容: 在mysql上运行查询的最安全方法是什么,我知道MySQL和SQL注入涉及的危险。 但是,我不知道如何运行查询以防止注入其他用户(Web客户端)可以操纵的变量。我曾经编写自己的转义函数,但显然这是“未完成”的。 我应该使用什么,以及如何使用它来通过python在MySQL数据库上安全地进行查询和插入,而又不会冒mysql注入的风险? 问题答案: 为避免注入,请使用with 代替每个变量