介紹
在現代應用程式中,高效的文字搜尋至關重要,尤其是在處理大型資料庫時。雖然 MySQL 提供了基本的全文搜尋功能,但在模糊匹配或處理拼字錯誤方面卻存在不足。這就是基於三元組的搜尋發揮作用的地方。在這篇部落格中,我們將探討什麼是三元組、它如何提高搜尋效能以及如何在 MySQL 中實現三元組搜尋。
什麼是卦象?
三元組是給定字串中三個連續字元的序列。例如,單字「search」可以分解為以下三元組:
透過建立臨時表在MySQL中實現三元組搜尋
1.在MySQL資料庫中建立Trigram函數。三卦函數程式碼:
CREATE FUNCTION TRIGRAM_SEARCH(search_string VARCHAR(255), target_string VARCHAR(255)) RETURNS FLOAT DETERMINISTIC BEGIN DECLARE i INT DEFAULT 1; DECLARE total_trigrams INT DEFAULT 0; DECLARE matched_trigrams INT DEFAULT 0; DECLARE search_length INT; DECLARE target_length INT; SET search_length = CHAR_LENGTH(search_string); SET target_length = CHAR_LENGTH(target_string); -- Handle edge cases where strings are too short IF search_length 0 THEN RETURN matched_trigrams / total_trigrams; ELSE RETURN 0; END IF; END;
2.現在將所需列索引為全文
@Entity() @Index(['title'], { fulltext: true }) export class Ebook extends BaseEntity { @PrimaryGeneratedColumn() ebookId: number; @Column({ nullable: true }) title: string; }
3.八字搜尋功能測試
select * FROM ebook e WHERE TRIGRAM_SEARCH('physis onlu', e.title) > 0.4 ORDER BY TRIGRAM_SEARCH('physis onlu', e.title) desc;
4.在程式碼中實現三元組搜尋
async find(title?: string) { const eBooks = await this.dataSource .getRepository(Ebook) .createQueryBuilder('eBook'); if (title) { eBooks.where(`TRIGRAM_SEARCH(:title, eBook.title) > 0.4`, { title }); } const result = await eBooks.getMany(); return result; }
結論
Trigram 搜尋提供了一種在 MySQL 資料庫中實現模糊匹配的強大方法。透過將文字分解為三元組,我們可以執行更靈活和更寬容的搜索,從而極大地增強文字搜尋至關重要的應用程式中的使用者體驗。
雖然這種方法有其優點,但重要的是要根據您的特定用例和效能要求考慮 Levenshtein 距離或 soundex 演算法等替代方案。
透過實作三元組搜索,您可以顯著提高 Node.js 和 MySQL 應用程式的搜尋能力,為使用者提供更聰明、更寬容的搜尋結果。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3