Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用正则表达式加速MongoDB查询_Regex_Mongodb_Mongodb Query_Query Performance - Fatal编程技术网

Regex 使用正则表达式加速MongoDB查询

Regex 使用正则表达式加速MongoDB查询,regex,mongodb,mongodb-query,query-performance,Regex,Mongodb,Mongodb Query,Query Performance,我有一个查询可能太复杂了,MongoDB无法快速执行它。如果我可以改变MongoDB的设置方式,我很想知道 下面是一个示例查询,用于在jobs集合中搜索术语“api” 最终,运行32000个文档需要3秒钟以上(摘自MongoDB Profiler): 我想在title、query、description中添加一个索引,但MongoDB只允许每个集合使用一个文本索引,而我有三个字符串字段(title、query、description)进行查询。解决方案是基于三个字段创建一个文本索引。我不知道Mo

我有一个查询可能太复杂了,MongoDB无法快速执行它。如果我可以改变MongoDB的设置方式,我很想知道

下面是一个示例查询,用于在jobs集合中搜索术语“api”

最终,运行32000个文档需要3秒钟以上(摘自MongoDB Profiler):


我想在title、query、description中添加一个索引,但MongoDB只允许每个集合使用一个文本索引,而我有三个字符串字段(title、query、description)进行查询。

解决方案是基于三个字段创建一个文本索引。我不知道Mongo允许您在每个文本索引中使用多个字段。现在开得太快了

您可以用
\b
?此外,由于第一种情况应该是最常见的情况,因此您最有可能将其反转。您可以在任意数量的字段上创建文本索引
db.jobs.createIndex({title:“text”,query:“text”,description:“text”})
。试试看它是否能提高您的查询响应时间。在我看来,您需要检查您的正则表达式。和a;)。
db.jobs.find(
  {
    'budget': {'$exists': true, '$ne': ''}, 
    '$or': [
      {'title': /(^|[\\s.,])api.*/gi}, 
      {'query': /api'/gi}, 
      {'description': /(^|[\\s.,])api.*/gi}
    ]
  }
)
"ntoreturn" : 0,
"ntoskip" : 0,
"nscanned" : 0,
"nscannedObjects" : 34266,
"keyUpdates" : 0,
"writeConflicts" : 0,
"numYield" : 274,