在数据库mysql中存储和检索同义词的最佳方法
我正在建设一个同义词列表,我将它存储在数据库中并在举办全文搜刮之前检索它. 当用户输入如下:word1 我必要在我的同义词表中查找这个单词.以是,假如找到这个单词,我会选择这个单词的全部同义词,并在下一个查询的全文搜刮中行使它,我在哪里构建查询 MATCH(columnname)AGAINST((word1a word1b word1c)在BOOLEAN MODE中) 那么怎样将同义词存储在表中?我找到了两个选择: >行使键和单词列 val keyword ------------- 1 word1a 1 word1b 1 word1c 2 word2a 2 word2b 3 word3a etc. 那么我可以在一个查询中找到输入单词的完全匹配并找到它的ID.在下一个选择中,我得到具有该ID的全部单词,并以某种方法行使处事器端说话中的记录集轮回来毗连它们.然后,我可以在主表上构建我必要查找单词的真实搜刮. >只行使像word这样的单词列 word1a|word1b|word1c word2a|word2b|word2c word3a 此刻我是SELECT说话,假如它在任何记录中,假如是,则提取全部记录并在|中将其爆炸我再次说出我可以行使的话. 第二种要领看起来更易于维护这个同义词数据库的人,但我看到了两个题目: a)假如字符串中有单词,我如安在mysql中找到?我不能像’word1a’那样,由于synonims也许很是相似,word1a也许是strowberry,strowberries也许是鸟类,而2a也许是浆果.显然我必要完全匹配,那么LIKE语句如安在字符串中完全匹配? b)我看到一个速率题目,行使LIKE我想行使第一种要领,我完全匹配一个单词,行使比“=”更多的mysql.另一方面,在第一个选项中,我必要2个语句,一个用于获取单词的ID,第二个用于获取具有此ID的全部单词. 你会怎样办理这个题目,更多的是采纳何种方法采纳的两难选择?有没有第三种要领我没有看到打点员很轻易添加/编辑同义词,同时快速和最佳?好的我知道凡是没有最好的要领;-) 更新:行使两个表一个用于主词,第二个用于同义词的办理方案在我的环境下不起浸染.由于我没有效户在搜刮字段中输入的MASTER字样.他可以在字段中键入任何同义词,以是我如故想知道怎样配置这个表,由于我没有主单词,我将在一个表中具有ID,而且在第二个表中与主单位的ID同步.没有主词. 办理要领不要行使(一个)字符串来存储差异的条目.换句话说:构建一个单词表(word_ID,单词)和一个同义词表(word_ID,synonym_ID),然后将单词添加到单词表中,并将每个同义词的一个条目添加到同义词表中. 更新(添加第3个同义词) 你的单词表必需包括每个单词(ALL),你的同义词表只包括指向同义词的指针(不是单个单词!). 假如您有三个单词:A,B和C,它们是同义词,那么您的数据库就是 WORD_TABLE SYNONYM_TABLE ID | WORD W_ID | S_ID ---+----- -----+------- 1 | A 1 | 2 2 | B 2 | 1 3 | C 1 | 3 3 | 1 2 | 3 3 | 2 不关键怕SYNONYM_TABLE中的很多条目,它们将由计较机打点,而且必要反应单词之间的现有相关. 第二种要领 您也许也会受到勾引(我以为您不该该!)与一个具有单独的单词字段和同义词(或ID)列表的表(word_id,word,synonym_list).请留意,这与相关数据库的事变方法相反(一个字段,一个究竟). (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |