」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 模糊匹配與三元組搜尋:在 Node.js 和 MySQL 中建立智慧搜尋

模糊匹配與三元組搜尋:在 Node.js 和 MySQL 中建立智慧搜尋

發佈於2024-11-09
瀏覽:557

Fuzzy Matching with Trigram Search: Building Intelligent Search in Node.js and MySQL

介紹
在現代應用程式中,高效的文字搜尋至關重要,尤其是在處理大型資料庫時。雖然 MySQL 提供了基本的全文搜尋功能,但在模糊匹配或處理拼字錯誤方面卻存在不足。這就是基於三元組的搜尋發揮作用的地方。在這篇部落格中,我們將探討什麼是三元組、它如何提高搜尋效能以及如何在 MySQL 中實現三元組搜尋。

什麼是卦象?
三元組是給定字串中三個連續字元的序列。例如,單字「search」可以分解為以下三元組:

  • 耳朵
  • rch 透過將單字分解為三元組,我們可以執行更靈活、更有效率的文字匹配,特別是在嘗試匹配不完整或輕微拼寫錯誤的術語時。

透過建立臨時表在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 應用程式的搜尋能力,為使用者提供更聰明、更寬容的搜尋結果。

版本聲明 本文轉載於:https://dev.to/mukesh_rajbanshi/fuzzy-matching-with-trigram-search-building-intelligent-search-in-nodejs-and-mysql-2839?1如有侵犯,請聯絡study_golang@163 .com刪除
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3