Ruby on rails 嵌入式一对多MongoID子文档中的全文搜索

Ruby on rails 嵌入式一对多MongoID子文档中的全文搜索,ruby-on-rails,mongodb,full-text-search,mongoid,nosql,Ruby On Rails,Mongodb,Full Text Search,Mongoid,Nosql,我有一个MongoID用户模型 class User include Mongoid::Document field :name embeds_many :watchlists end 其中嵌入 我想将全文搜索到:description字段中,该字段位于用户中嵌入的监视列表子项中。最繁重的搜索需要1.5k个描述,每个描述最多30、40个单词 这里的限制是,我将部署在Heroku上,而他们目前还没有索引的自由计划 然后我尝试了(以及和),但没有成功 有人知道怎么做吗 更新: 这是一

我有一个MongoID用户模型

class User
  include Mongoid::Document
  field :name

  embeds_many :watchlists
end
其中嵌入

我想将全文搜索到
:description
字段中,该字段位于用户中嵌入的监视列表子项中。最繁重的搜索需要1.5k个描述,每个描述最多30、40个单词

这里的限制是,我将部署在Heroku上,而他们目前还没有索引的自由计划

然后我尝试了(以及和),但没有成功

有人知道怎么做吗

更新:

这是一个例子。用户模型嵌入了许多观察列表。我正在:description字段中搜索一个字符串,该字段位于Watchlist子文档中:

class Watchlist
  include Mongoid::Document

  field :description
  ...

  embedded_in :user
end
监视列表嵌入到用户:

class User
  include Mongoid::Document
  include Mongoid::FullTextSearch

  field :name
  ...

  embeds_many :watchlists

  def search_in_description
    self.watchlists.map{ |w| w.description }.join(' ')
  end
  fulltext_search_in :search_in_description
end
。。。但是通过这种方式,运行
User.fulltext\u search(“基于CSS3强大功能的表示框架”)
只会返回导致匹配的父文档(用户实例),而不会返回监视列表文档(子实例)

请参见输出:


我怎样才能得到匹配的“观察名单”?(我尝试了几种方法都没有成功)

在MongoDB中,您无法直接查询嵌入式文档。您可以按照示例中介绍的方式查询它们以获取父文档,然后在返回的顶级文档用户上查询当前用户观察列表中所需的嵌入文档


如果你经常这样做,也许你可能想考虑使用关系HasyMulk而不是嵌入多个。

在MunGDB中,你不能直接查询嵌入的文档。您可以按照示例中介绍的方式查询它们以获取父文档,然后在返回的顶级文档用户上查询当前用户观察列表中所需的嵌入文档


如果你经常这样做,也许你可能想考虑使用关系HasyMulk而不是嵌入多个。

我猜你是指在嵌入式关系中使用Apple TraseNeStDyAtestType的“嵌套属性”…无论如何,该示例使用了mongoid_fulltext,它通过设置在父级上的fulltext_search_为User.fulltext_搜索方法。如果我不清楚的话,那不是直接的质问。我的意思是,在Mongoid中,您将始终获得父文档,即使您的查询是针对嵌入式文档字段的。如果您需要频繁地查询和检索嵌入文档,那么引用关系可能更适合您的情况:我猜您的意思是“嵌套属性”,在嵌入关系中使用accepts\u Nested\u attributes\u。。。无论如何,该示例使用了mongoid_fulltext,它通过设置在父级上的fulltext_search_为User.fulltext_搜索方法。如果我不清楚的话,那不是直接的质问。我的意思是,在Mongoid中,您将始终获得父文档,即使您的查询是针对嵌入式文档字段的。如果您需要频繁查询和检索嵌入文档,那么引用关系可能更适合您的情况:
class User
  include Mongoid::Document
  include Mongoid::FullTextSearch

  field :name
  ...

  embeds_many :watchlists

  def search_in_description
    self.watchlists.map{ |w| w.description }.join(' ')
  end
  fulltext_search_in :search_in_description
end