4

我想知道那里的主要 SQL 引擎(MS SQL、Oracle、MySQL)是否有能力理解两个词是相关的,因为它们共享相同的根。

我们知道在搜索“network”时很容易匹配“networking”,因为后者是前者的子字符串。

但是SQL引擎有没有在搜索“networking”时可以匹配“network”的功能呢?

非常感谢。

4

4 回答 4

5

此功能称为词干分析器:一种可以从任何形式的单词中推导出词干的算法。

这可能非常复杂:例如,俄语单词шёлandиду是同一个动词的不同形式,尽管它们没有一个共同的字母(具有讽刺意味的是,英语也是如此:wentgo)。

对于某些在单词之间不使用空格的语言来说,断词也可能是一项相当复杂的任务。

SQL Server允许为其全文搜索引擎使用可插入的词干分析器和断字器:

http://msdn.microsoft.com/en-us/library/ms142509.aspx

于 2010-10-29T12:09:50.520 回答
1

我认为主题是“语义相似性”。有一些努力试图找到这个问题的最佳解决方案。

于 2010-10-29T12:03:06.107 回答
1

您可以尝试使用 soundex,尽管它可能不是您想要的。请参阅http://www.codeproject.com/KB/database/Phonetic_Search_MSSQL.aspx

于 2010-10-29T12:06:29.250 回答
1

正如 Quassnoi 指出的那样,这可以通过stemming来完成。如果你打开它,PostgreSQL 会为全文搜索实现它。

ALTER TEXT SEARCH CONFIGURATION blah_en ADD MAPPING FOR english_stem;

这使用基于Porter 词干分析器的Snowball 字典。Porter 词干分析器可能是使用最广泛的词干分析器之一,因此它会产生不错的结果。但是,重要的是要记住,词干并不总是像您希望的那样准确。

于 2010-10-29T12:52:57.027 回答