0
我有一个模型项目与索引字段名为_key,这是字符串(搜索关键字)的数组。 现在我需要以另一种形式对此模型(通过JSON)进行自动完成,问题在于,不是通过用户输入的所有单词进行精确搜索,而是需要通过除最后一个单词之外的所有单词进行精确搜索。所以我做了这个作用域在这个模型:MongoID和多键查询问题
scope :find_by_keywords, lambda { |keys| where(:_keys.all => keys) }
scope :for_autocomplete, lambda { |keys| where(:_keys.all => keys[0..-2], :_keys => /^#{keys[-1]}/i) }
用于精确搜索的第一个范围效果很好,但我有与自动完成第二范围的问题。 MongoID优化(或类似)此查询,因此它变成
db_development['items'].find({:_keys=>/^qwer/i}, {})
即它总是错过了第一个条件。这并不奇怪,因为它在不同条件下需要不同的标准。 所以我尝试了许多选择。 .all和.in的不同组合,分别适用于不同的'wheres','all_in'方法,'find(:conditions => ...)'等。你能提出建议吗,我该怎么做这份工作?