首页 > 解决方案 > 使用 SQL Server 全文搜索以特定顺序匹配词的屈折形式

问题描述

我想使用SQL Server 全文搜索来查找以特定顺序出现的词的屈折形式。所以单词methodandapparatus会匹配These are the methods I'm using with the apparatuses但不匹配This apparatus is used with these methods

有没有办法做到这一点?看起来很简单,但我什么也没找到。

我试过CONTAINS

'NEAR((method,apparatus), MAX, TRUE) AND FORMSOF(INFLECTIONAL,method) AND FORMSOF(INFLECTIONAL,apparatus)'

'FORMSOF(INFLECTIONAL,NEAR((method,apparatus), MAX, TRUE))'

'NEAR((FORMSOF(INFLECTIONAL,method),FORMSOF(INFLECTIONAL,apparatus)), MAX, TRUE)'

标签: sql-serverfull-text-searchsql-server-2016

解决方案


问题是你不能结合FORMSOFNEAR这里是参考)。一种可能的方法(尽管效率不高)是尝试“方法”“设备”的所有不同替代方案(如果您没有其他词要搜索),如下所示:

   SELECT some_id
   FROM some_table
   WHERE CONTAINS(some_text, 'NEAR((method,apparatus), MAX, TRUE) OR NEAR((method,apparatuses), MAX, TRUE) OR NEAR((methods,apparatus), MAX, TRUE) OR NEAR((methods,apparatuses), MAX, TRUE)')

另一种选择是使用CHARINDEX(这也可能是低效的),如下所示:

   SELECT some_id
   FROM some_table
   WHERE CONTAINS(some_text, 'FORMSOF(INFLECTIONAL,method) AND FORMSOF(INFLECTIONAL,apparatus)')
   AND CHARINDEX('method', some_text) < CHARINDEX('apparatus', some_text)

他们都和我一起工作得很好。希望这可以帮助。


推荐阅读