我有一个 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/
我在搜索我的值是方法的散列时遇到问题。我只是不想运行plan_type与键匹配的方法。defmethod(plan_type,plan,user){foo:plan_is_foo(plan,user),bar:plan_is_bar(plan,user),waa:plan_is_waa(plan,user),har:plan_is_har(user)}[plan_type]end目前如果我传入“bar”作为plan_type,所有方法都会运行,我怎么能只运行plan_is_bar方法呢? 最佳答案 这个变体怎么样?defmethod
我想获取主题名称与搜索关键字匹配的所有配置文件。现在我正在加载所有配置文件。我需要知道如何实现它。非常感谢任何帮助。配置文件.rbhas_many:categorizationshas_many:subjects,through::categorizations主题.rbhas_many:categorizationshas_many:profiles,through::categorizations分类.rbbelongs_to:profilebelongs_to:subjectviews/search/index.html.erb#searchform'get'do%>nil%>#
在几个项目中,我希望有一个类似rakeserver的rake任务,它将通过任何需要的方式开始为该应用程序提供服务。这是一个示例:task:serverdo%x{bundleexecrackup-p1234}end这行得通,但是当我准备停止它时,按Ctrl+c并没有正常关闭;它中断了Rake任务本身,它说rakeaborted!并给出堆栈跟踪。在某些情况下,我必须执行Ctrl+c两次。我可能可以用Signal.trap写一些东西来更优雅地中断它。有没有更简单的方法? 最佳答案 trap('SIGINT'){puts"Yourmessa
我的ruby脚本从命令行参数获取某些输入。它检查是否缺少任何命令行参数,然后提示用户输入。但是我无法使用gets从用户那里获得输入。示例代码:test.rbname=""ARGV.eachdo|a|ifa.include?('-n')name=aputs"Argument:#{a}"endendifname==""puts"entername:"name=getsputsnameend运行脚本:rubytest.rbraghav-k错误结果:test.rb:6:in`gets':Nosuchfileordirectory-raghav-k(Errno::ENOENT)fromtes
我正在尝试找出一种方法来显示来自不在RAILS_ROOT下(在RedHat或Ubuntu环境中)的已安装文件系统的图像。我不想使用符号链接(symboliclink),因为这个应用程序实际上是通过Tomcat部署的,而当我关闭Tomcat时,Tomcat会尝试跟随符号链接(symboliclink)并删除挂载中的所有图像。由于这些文件的数量和大小,将图像放在public/images下也不是一种选择。我查看了send_file,但它只会显示一张图片。我需要在一个格式良好的页面中显示6个请求的图像。由于膨胀,我宁愿不使用Base64编码,但我不知道如何将图像数据与呈现的页面一起传递下去。
我正在编写一个简单的日志嗅探器,它将在日志中搜索表明我支持的软件存在问题的特定错误。它允许用户指定日志路径并指定他们想要搜索多少天前。如果用户关闭日志滚动,日志文件有时会变得非常大。目前我正在做以下事情(虽然还没有完成):File.open(@log_file,"r")do|file_handle|file_handle.eachdo|line|ifline.match(/\d+++-\d+-\d+/)etc...line.match显然会查找我们在日志中使用的日期格式,其余逻辑将在下面。但是,有没有更好的方法来搜索没有.each_line的文件?如果没有,我完全同意。我只是想确保我使
我开始了一个新的Rails3.2.5项目,Assets管道不再工作了。CSS和Javascript文件不再编译。这是尝试生成Assets时日志的输出:StartedGET"/assets/application.css?body=1"for127.0.0.1at2012-06-1623:59:11-0700Servedasset/application.css-200OK(0ms)[2012-06-1623:59:11]ERRORNoMethodError:undefinedmethod`each'fornil:NilClass/Users/greg/.rbenv/versions/1
rails新手。只是想了解\assests目录中的这两个文件。例如,application.js文件有如下行://=requirejquery//=requirejquery_ujs//=require_tree.我理解require_tree。只是将所有JS文件添加到当前目录中。根据上下文,我可以看出requirejquery添加了jQuery库。但是它从哪里得到这些jQuery库呢?我没有在我的Assets文件夹中看到任何jquery.js文件——或者直接在我的整个应用程序中没有看到任何jquery.js文件?同样,我正在按照一些说明安装TwitterBootstrap(http:
我有一个包含多个组件的存储库,其中大部分是用JavaScript(Node.js)编写的,一个是用Ruby(RubyonRails)编写的。我想要一个.travis.yml文件来触发一个运行每个组件的所有测试的构建。根据thisTravisCIGoogleGroupthread,目前还没有官方支持。我的目录结构是这样的:.├──构建服务器├──核心├──扩展├──网络应用├──流浪文件├──package.json├──.travis.yml└──生成文件我希望能够运行特定版本的Ruby(2.2.2)和Node.js(0.12.2)。我已经有了一个make目标,所以maketest在每
我有时遇到过Array(value)、String(value)和Integer(value)形式的转换。在我看来,这些只是调用相应的value.to_a、value.to_s或value.to_i方法的语法糖。所以我想知道:这些是在哪里/如何定义的?我在对象、模块、类等中找不到它们是否有任何常见场景更适合使用这些而不是相应/底层的to_X方法?这些可以用于泛型强制转换吗?也就是说,我可以按照[Integer,String,Array].each{|klass|klass.do_generic_coercion(foo)}?(...不,我真的不想那样做;我知道我想要的类型,但我希望避免