我想知道那里的主要SQL引擎(MS SQL,Oracle,MySQL)是否能够理解2个单词是相关的,因为它们共享相同的根。
我们知道在搜索“网络”时很容易匹配“网络”,因为后者是前者的子串。
但是,在搜索“网络”时,SQL引擎是否具有可以匹配“网络”的功能?
非常感谢。
答案 0 :(得分:5)
此功能称为stemmer:一种算法,可以从任何形式的词中推断出词干。
这可能相当复杂:例如,俄语单词шёл
和иду
是同一动词的不同形式,尽管它们没有一个共同的字母(具有讽刺意味的是,英语也是如此) :went
和go
)。
对于某些在单词之间不使用空格的语言来说,断字也是一项非常复杂的任务。
SQL Server
允许使用可插入的词干分析器和断字符作为其全文搜索引擎:
答案 1 :(得分:1)
我认为主题是'语义相似'。有几种努力试图找到解决这个问题的最佳方案。
答案 2 :(得分:1)
您可以尝试使用soundex,尽管它可能不是您想要的。请参阅http://www.codeproject.com/KB/database/Phonetic_Search_MSSQL.aspx。
答案 3 :(得分:1)
正如Quassnoi指出的那样,这可以通过stemming来完成。如果你打开它,PostgreSQL会为full-text search实现它。
ALTER TEXT SEARCH CONFIGURATION blah_en ADD MAPPING FOR english_stem;
这使用Snowball dictionary,它基于Porter stemmer。 Porter干扰器可能是最广泛使用的干扰器之一,因此它将提供不错的结果。但重要的是要记住,干预并不总是像你想的那样准确。