小程序搜索功能,云開(kāi)發(fā)搜索,小程序云開(kāi)發(fā)模糊搜索,同時(shí)搜索多個(gè)字段
今天來(lái)給大家講講小程序的搜索功能。我這里后臺(tái)數(shù)據(jù)庫(kù)用的是小程序云開(kāi)發(fā)的云數(shù)據(jù)庫(kù)。所以我們搜索的時(shí)候就要借助云開(kāi)發(fā)來(lái)實(shí)現(xiàn)。
一,需求
比如我這里有如下的一些數(shù)據(jù)

我們想實(shí)現(xiàn)如下搜索需求
1,搜索標(biāo)題(title)包含‘小石頭’的數(shù)據(jù)
2,搜索標(biāo)題(title)或者描述(desc)包含‘小石頭’的數(shù)據(jù)
3,搜索標(biāo)題(title)描述(desc)都包含‘小石頭’的數(shù)據(jù)
我們知道數(shù)據(jù)庫(kù)查詢的時(shí)候有個(gè)where語(yǔ)句,但是where語(yǔ)句是查詢某個(gè)字段全部包含你輸入的內(nèi)容時(shí)才可以,所以單純用where語(yǔ)句來(lái)做搜索的話,結(jié)果太單一。所以我們今天就來(lái)學(xué)習(xí)下模糊搜索功能的實(shí)現(xiàn)。我們以上面三個(gè)需求為例,來(lái)一個(gè)個(gè)講解。
二,實(shí)現(xiàn)原理
我們做模糊搜索的時(shí)候,其實(shí)就是查詢某個(gè)字段里是否包含我們的搜索詞。而模糊搜索需要借助RegExp,來(lái)看看RegExp是什么。

官方文檔:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/database/Database.RegExp.html
再來(lái)看看官方示例

可能看官方示例會(huì)有點(diǎn)糊涂,那么我們接下來(lái)就結(jié)合具體代碼來(lái)給大家做下講解。
三,模糊搜索的代碼實(shí)現(xiàn)
3-1,模糊搜索單個(gè)字段
需求:搜索標(biāo)題(title)包含‘小石頭’的數(shù)據(jù)
代碼如下

查詢結(jié)果如下:

可以看到我們成功的查詢到了標(biāo)題里包含‘小石頭的數(shù)據(jù)’
3-2,模糊搜索多個(gè)字段(滿足一個(gè)即可)
需求:搜索標(biāo)題(title)或者描述(desc)包含‘小石頭’的數(shù)據(jù)
由于我們要查詢多個(gè)字段,所以我們這里用到了command高級(jí)操作符里的or

代碼如下:

查詢結(jié)果:

我們來(lái)分析下這兩條數(shù)據(jù)
1,標(biāo)題和描述都包含‘小石頭’,符合
2,雖然標(biāo)題里沒(méi)有‘小石頭’,但是描述里有,所以也符合。
3,title和desc里都沒(méi)有‘小石頭’,所以不符合。

3-3,模糊搜索多個(gè)字段(要同時(shí)滿足)
需求:搜索標(biāo)題(title)描述(desc)都包含‘小石頭’的數(shù)據(jù)
由于我們要查詢多個(gè)字段,所以我們這里用到了command高級(jí)操作符里的and

代碼如下:

查詢結(jié)果:

我們來(lái)分析下這兩條數(shù)據(jù)
1,標(biāo)題和描述都包含‘小石頭’,符合
2,雖然desc里沒(méi)有‘小石頭’,但是title里沒(méi)有,所以也不符合。
3,title和desc里都沒(méi)有‘小石頭’,所以也不符合。

四,源碼
為例方便大家使用,我把完整的代碼貼到這里,后面大家使用時(shí),直接復(fù)制這里的代碼,略微改造下就可以了。
? ?//我這里簡(jiǎn)單起見(jiàn)就把搜索詞寫死,正常應(yīng)該用戶輸入的
? ?let searchKey = '小石頭'
? ?let db = wx.cloud.database()
? ?let _ = db.command
? ?db.collection('news')
? ? ?.where(_.or([
? ? ? ?{//標(biāo)題
? ? ? ? ?title: db.RegExp({ //使用正則查詢,實(shí)現(xiàn)對(duì)搜索的模糊查詢
? ? ? ? ? ?regexp: searchKey,
? ? ? ? ? ?options: 'i', //大小寫不區(qū)分
? ? ? ? ?}),
? ? ? ?},
? ? ? ?{//描述
? ? ? ? ?desc: db.RegExp({
? ? ? ? ? ?regexp: searchKey,
? ? ? ? ? ?options: 'i',
? ? ? ? ?}),
? ? ? ?}
? ? ?])).get()
? ? ?.then(res => {
? ? ? ?console.log('查詢成功', res)
? ? ?})
? ? ?.catch(res => {
? ? ? ?console.log('查詢失敗', res)
? ? ?})
到這里就講完了,我后面會(huì)專門在云開(kāi)發(fā)入門的課程里作為實(shí)戰(zhàn)案例錄制視頻給到大家的:
https://edu.csdn.net/course/detail/26572