我有两个表格: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