标记字段可能看起来像"abc def hij 123"
。标签是空格分隔的。每条记录可能超过200个标签。 (标签正在“动态”定义)
鉴于table1中的记录,我想从table2中找到“最合适”的记录,其中table1行中的标记与table2中的行中的标记匹配。
MySQL全文搜索似乎是最好用的。
Table2应该只有大约800-1000行 - 所以那里没有多少开销。但是Table1可能有2000万,而且我可能希望在将来做相反的事情(在table2中为table2中的一行找到最佳匹配)。
您认为全文搜索是最好用的吗?如果不是什么可以替代?
我已经研究过XML数据库,并且他们承诺(特别是Xbase)......但我是否有信心将该数据库放在生产机器上?还没......(或者我应该?)
答案 0 :(得分:2)
全文搜索对您没有帮助,因为您的干草堆和都没有标准化。如果您只有一个标记(针)在非规范化列表(大海捞针)中搜索,FTS可以帮助您。但是,相反,您需要首先将搜索标签列表标准化为一堆单独的针,然后在大海捞针中搜索每个针。
首先将数据标准化(表单的单独标记表(ID,Tag))并使用JOIN确定共有多少个共同点,你会好得多。
进一步考虑我会建议一个TaggedItems表,其结构如下:(TAG TEXT(3), ID1 INTEGER, ID2 INTEGER)
。如果要标记表1,则会为标记和ID1列发出INSERT OR UPDATE(或等效的MySQL)。表2和ID2列相同。现在,您可以通过选择此表中的记录计数来检索相似性评级,其中ID1 =您感兴趣的ID1值,ID2是NOT NULL,GROUPED BY ID2。不需要加入。
答案 1 :(得分:0)
您可以使用另一张表格来表达ID与每个单词“aaa”“bbb”之间的关系......