我有一个MongoID用户模型
class User
include Mongoid::Document
field :name
embeds_many :watchlists
end
class Watchlist
include Mongoid::Document
field :description
embedded_in :user
end
我想将全文搜索到:description
字段中,该字段位于User中嵌入的Watchlist子项中。最重的搜索通过1.5k描述,最多30个,每个40个单词。
这里的限制是,我将部署在Heroku上,而且他们目前还没有免费的索引计划。
然后我尝试使用mongoid_fulltext(以及mongoid_search和mongoid-searchable),但没有成功。
有人知道怎么做吗?
更新:
这是mongoid_fulltext的一个例子。用户模型嵌入了许多关注列表。我正在搜索一个字符串: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_search("a presentation framework based on the power of CSS3")
只返回导致匹配的父文档(用户实例)而不是监视列表doc(子实例)。
请参阅输出:http://pastie.org/3226179
如何获得匹配的“关注列表”? (我尝试了几种没有成功的方法)
答案 0 :(得分:1)
在MongoDB中,您无法直接查询嵌入式文档。您可以按照您在示例中说明的方式查询以获取父文档,然后在返回的顶级文档用户上查询当前用户关注列表中所需的嵌入文档。
如果你经常这样做,也许你可能想考虑使用关系has_many而不是embeds_many。