我有兩個表格:sql /存儲過程來查找word標記表中的匹配記錄
CREATE TABLE doc
( doc_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, doc_text VARCHAR(10000) NOT NULL
);
CREATE TABLE doc_tag
( doc_id INT NOT NULL
, tag_word VARCHAR(50) NOT NULL
, PRIMARY KEY(doc_id, tag_word)
, KEY ix_doc_tag_word_doc_id (tag_word, doc_id)
);
表格doc中的記錄可能有例如,在doc_tag
表中有5,10甚至20個相關的字標籤。
我該如何編寫MYSQL
中的存儲過程,我可以爲該BASE doc
記錄和最少匹配標記字數(表doc_tag
)提供doc_id
。結果應該是doc_id
其他doc
記錄與BASE doc
記錄具有相同的最小字數(存儲在doc_tag
中)。
所以我的原始基礎doc
記錄可能在doc_tag
表10分的標籤的話,但我想找到的所有其他doc
記錄在doc_tag
共享10個標記的話至少5。只要至少有5個屬於BASE doc
記錄的單詞中的至少5個在屬於其他doc
記錄的doc_tag
記錄中找到也沒關係。
一個例子: BASE: doc.doc_id
:1
doc_text
: 「這是我的基本文件」
doc_tag.doc_id
:1,doc_tag.tag_word
:書
doc_tag.doc_id
:1,doc_tag.tag_word
:表
doc_tag.doc_id
:1 ,doc_tag.tag_word
:chair
doc_tag.doc_id
:1,doc_tag.tag_word
:wall
doc_tag.doc_id
:1,doc_tag.tag_word
:地板
doc_tag.doc_id
:1,doc_tag.tag_word
:房子
doc_tag.doc_id
:1,doc_tag.tag_word
:手機
doc_tag.doc_id
:1,doc_tag.tag_word
:天花板
匹配其他doc
記錄:
doc.doc_id
:20187
doc_text
:「這是一個標籤匹配OTHER文檔」
doc_tag.doc_id
:20187,doc_tag.tag_word
:天花板
doc_tag.doc_id
:20187,doc_tag.tag_word
:地板
doc_tag.doc_id
:20187,doc_tag.tag_word
:房間
doc_tag.doc_id
:20187,doc_tag.tag_word
:房子
doc_tag.doc_id
:20187,doc_tag.tag_word
:牆壁
doc_tag.doc_id
:20187 ,doc_tag.tag_word
:電話
doc_tag.doc_id
:20187,doc_tag.tag_word
:地下室
doc_tag.doc_id
:20187,doc_tag.tag_word
:樓道
之所以記錄是匹配的是單詞「天花板」,「樓」,「房子」,「手機」和「牆」是兩個doc
記錄標籤的話。沒有關係,兩者都有不共享的其他標籤字。
可能需要準備代碼來確定最初的10個標記詞的5個可能組合,以創建最終查詢。但是,我有這樣的感覺,就是有一種美麗而緊湊的方式來做到這一點,而這一切只是讓我無法迴避。
如果mySQL的存儲過程語言沒有配備處理這個問題,那麼可以在另一種方言中提出解決方案,例如, MSSQL的T-SQL。它主要是一個會用我感興趣的算法
非常感謝您的幫助! 本來會提高答案的評分,但作爲一個新用戶,我顯然必須在獲得允許之前贏得更多聲譽。 – Orion