gpt4 book ai didi

node.js - 在 MongoDB 中搜索(来自 NodeJS)

转载 作者:可可西里 更新时间:2023-11-01 10:44:11 25 4
gpt4 key购买 nike

我有一个 MongoDB 数据库,每天会有 5 到 10 次插入,每天。将要插入的数据结构如下所示:

{
question: 'text here',
date: '01/01/2000 01:01',
title: 'Some title',
client: 'name',
assigned_to: ['name1', 'name2', 'name3'],
answers: [
{answer: 'bla bla'},
{answer: 'bla bla'},
{answer: 'bla bla'}
]
}

我需要在所有文本字段(问题、标题和所有答案)中搜索一个词或一系列词。我一直在寻找,这是我到目前为止所发现的。有3种解决方案:

a) $regexp 
b) Enable full-text search in MongoDB and use it
c) Save the structure with the following format (and then use multi-key search)

{
question: 'text here',
question_s: ['text', 'here'],
date: '01/01/2000 01:01',
title: 'Some title',
title_s: ['Some', 'title'],
client: 'name',
assigned_to: ['name1', 'name2', 'name3'],
answers: [
{answer: 'bla bla', answer_s: ['bla', 'bla']},
{answer: 'bla bla', answer_s: ['bla', 'bla']},
{answer: 'bla bla', answer_s: ['bla', 'bla']}
]
}

知道我的数据的确切格式及其大小(预计 future 10 年),这 3 种数据中哪一种在速度和可用性方面更好? (还要考虑这些解决方案中的每一个所需的时间/脑痛,如设置、配置等)

最佳答案

当然,第二个在速度方面要好得多,尤其是在索引方面。第一个在可用性方面要好得多,因为可以使用简单的 RegExp。

另一种选择是拥有另一个所有单词的集合,然后将单词作为 _id 添加到其中,并具有 _id 的项目数组(在您的情况下是问题)。这样存储空间就少了,外部集合负责搜索。将使每个单词的搜索更容易,并且将能够通过此 RegExp 进行搜索:^someText,它是字符串的开头 - 也将使用索引。

这里的负面部分是您需要适当的系统来确保单词集合已更新并与实际项目(您的案例中的问题)一致。但一旦完成,它将变得快速且易于使用,并且无论单词集合的大小如何,都能够以良好的性能返回多个搜索结果,因为它将使用索引。

另一个问题可能会开始,如果单词集合索引数据太大并且无法放入 RAM,那么它会将这些索引数据移动到文件中 - 这通常会减慢写入和读取速度。
但为此你需要数百万条或更多的记录,然后你可以考虑数据库聚类,例如按首字母拆分单词集合。

关于node.js - 在 MongoDB 中搜索(来自 NodeJS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18745029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com