2016-11-17 41 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'); 

希望這是有幫助的!