我有一个模型Item,其中包含一个名为_key的索引字段,即字符串数组(搜索关键字)。 现在我需要以另一种形式对这个模型(通过JSON)进行自动完成,问题是用户输入的所有单词不是精确搜索,而是需要通过除最后一个单词之外的所有单词进行精确搜索。所以我在这个模型中制作了这个范围:
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 => ...)'等等。你能建议我怎么做这个工作吗?
答案 0 :(得分:0)
我找到了这样的解决方案:
范围:for_autocomplete,lambda {| keys | where(:_ keys.all => keys [0 ..- 2] + [/ ^#{keys [-1]} /])}
似乎正在发挥作用。