日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql同音字搜索_React-Native 给客户端来个「同音词模糊搜索」

發布時間:2023/12/9 数据库 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql同音字搜索_React-Native 给客户端来个「同音词模糊搜索」 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

APP上線一段時間有用戶反應說不方便找東西,其實APP的數據不大也就三四百條而以,但受限于手機端展示區域太小、信息大爆炸,大家也基本上不會去記具體的名稱都是根據模糊的印象進行搜索而且現在大家基本都用拼音搜索經常輸不準確也很正常。所以之前通過關鍵詞查找的方法不行了,思來想去還是加個同音詞搜索吧!

由于比較懶所以基本上就想看看有沒有什么現成的解決方案最好是配幾個API就能搞定的,可以找了一圈沒發現什么“簡便”的方案,像ElectricSearch、Lucene之類的后端的方案雖然特別牛逼但是一想到還要配置服務器、集成API啥的腦袋都大。所以還是放棄了!

但在查找的過程中還是有收獲的,無意中發現PinyinLite這個項目,這項目太有愛了不僅包小(經過最終測試未壓縮版的bundle增加100K左右了)而且帶了一個模糊查的的示例因此很快就實現該功能了,具體實現方案如下:

1、在原有列表數據中針對要查找的標題增加一個拼音的字段,標題的中文轉拼音是在后端MySQL實現的,具體可以參考:Mysql中文漢字轉拼音的實現(每個漢字轉換全拼)。輸出JSON如下所示:

[{"title": "戳爆她們","titlePinyin": "chuo bao ta men "......

}]

2、安裝PinyinLite及其依賴項

npm install pinyinlite --save

npm install lodash --save

npm install string_score --save

3、修改一下在React Native里的引用語法

import pinyinlite from 'pinyinlite';

import string_score from 'string_score';

import _ from 'lodash';

4、根據參數進行查詢(key為輸入的中文,db.allGames為JSON數據反序列化之后的數組對像)

//將中文拼音數據按字符串輸出

var keyPinyin = pinyinlite(key).map(item => {

return item[0]

}).join(' ');

//返回帶fuzzy匹配分值的數組

const scores = db.allGames.map(item => {

return {

data: item,

score: item.titlePinyin.score(keyPinyin)

};

})

//篩選數組獲得結果,0.3為精度控制可以根據實際結果進行調整

result = scores.filter(i => i.score > 0.3).sort((a, b) => b.score - a.score).map(item => item.data);

運行結果示例:

總結:

開發過程中最大的震撼是 JS的庫實在是太豐富了,用簡單的方法實現同音詞搜索功能,最終使Bundle未壓縮大了100K左右,執行速度大概是20毫秒以內,因此整個解決方案是可以接受的。當然可能也不是最優的解決方案,歡迎留言或郵件cbcye#live.com批評指正!

54

總結

以上是生活随笔為你收集整理的mysql同音字搜索_React-Native 给客户端来个「同音词模糊搜索」的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。