【问题标题】:How to arrange database for finding a word by searching with synonyms that I define?如何通过搜索我定义的同义词来安​​排数据库以查找单词?
【发布时间】:2013-11-09 11:06:59
【问题描述】:

我正在尝试创建一个简单的工具,允许用户使用我定义的同义词搜索大约 200 个单词。

示例:集合中的单词是“火”。用户可以搜索fireflameflamesmatches等(我把这些放进去)...它会返回“fire”

最初的想法:我的第一想法是有一个两列的表,其中第一列是 actual 单词,第二列是适当的同义词:

ACTUAL             SYNONYM
fire               flame
fire               flames
fire               matches

所以当用户搜索时,我会做一个简单的选择:

SELECT actual WHERE synonym = "THE SEARCH TERM"

问题:我应该如何设置我的数据库来搜索这些单词并将它们与同义词相关联?我提出的解决方案是最好/最有效的方法吗?我觉得我应该能够每个“实际”有一行,并将所有同义词放在第二列中,但我不知道如何搜索第二列,或者它是否会比只是一个直接的列表。

【问题讨论】:

    标签: database search database-design synonym


    【解决方案1】:

    只要您的同义词每个都映射回一个“实际”或核心词,您所拥有的就可以了。然后就是

    select ACTUAL from Your_Table where SYNONYM = "The_Search_Term"
    

    你会得到零个或一个记录。

    如果你的同义词足够不同,我可能会使用like 子句,所以你不需要弄乱复数:

    select ACTUAL from Your_Table where SYNONYM like "%The_Search_Term%"
    

    这样您就不需要同时包含flameflamesflame 对两者都有效。

    【讨论】:

    • 听起来不错。我不认为每个“实际”有超过 20 个同义词,所以表永远不会变得非常大。我为忽略了 FROM 而没有使用 LIKE 感到愚蠢。太久没做SQL了,哈哈。感谢您的帮助!
    • 我的荣幸。您没有指定 SQL,所以我不会称之为疏忽。我明白你在说什么。 LIKE 可能会减小表格的大小,但您会增加出现多个结果的机会。如果您的同义词之一是 cat 而另一个是 scatter,那么您将使用 LIKE 查询返回多行。
    • 嗯,好点子。多个结果并不是什么大不了的事,但我会搞砸它。享受你的夜晚!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    • 2016-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多