2016-11-17 61 views
0

现在我有类似的东西,以如何使用自动完成与撇号CMS全身搜索

var cursor = self.apos.docs.find(req, { highSearchText: {$regex: new RegExp(self.apos.utils.regExpQuote(req.query.search), 'i') } }) 

cursor.queryToFilters({ highSearchText: {$regex: new RegExp(self.apos.utils.regExpQuote(req.query.search), 'i') } }, 'public') 

.perPage(self.perPage); 

,我试图找出一种方法来实现autocomplete

回答

1

正如你知道我P'unk大道的撇号团队负责人。在您的形式

名称搜索领域的 “自动完成”

那么做到这一点:

你试图方式,途径,方式太硬(

var cursor = self.apos.docs.find(req, {}) 
    .queryToFilters(req.query, 'public') 
    .perPage(self.perPage); 
}; 

真的..这就是它queryToFilters的基本目的是基本上做到这一点(不完全,见下面的安全注意事项,它真的在做什么):

// DON'T DO THIS, JUST GIVES YOU AN IDEA OF WHAT'S GOING ON 
_.each(req.query, function(val, key) { 
    cursor[key](val); 
}); 

它调用与req.query(几乎)的属性同名的游标方法。

当然这是不安全的,但queryToFilters特别确保所讨论的方法是标记为safeFor: 'public'的游标过滤器并且也运行其消毒杀菌剂。

autocomplete就是这样一个游标过滤器,所以......繁荣,我们完成了。

另外,我看到你正在与self.apos.docs.find直接合作。我假设你这样做是因为你想从查询中返回所有类型的文档,在这种情况下你做的是正确的事情。

如果它是不明确的,如果你即使在第一时间查询字符串的工作没有,你可以叫autocomplete直接与不管它是你做的有:

cursor.autocomplete('startofaword'); 

希望这是有帮助的!