使用SQL Server FTS Stemmer

时间:2010-11-11 20:26:06

标签: sql-server-2008 full-text-search

有没有办法直接访问FORMSOF()全文搜索查询的CONTAINS选项中使用的词干分析器,以便它返回输入词的词干/变形,而不仅仅是那些派生词存在于搜索栏中。

例如,查询

SELECT * FROM dbo.MyDB WHERE contains(CHAR_COL,'FORMSOF(INFLECTIONAL, prettier)')
如果它们存在于CHAR_COL列中,

会返回词干“漂亮”和其他变形,例如“最漂亮”。我想要的是直接调用FORMSOF()函数而根本不引用列。有机会吗?

修改 满足我需求的查询最终成为

SELECT * FROM 
    (SELECT ROW_NUMBER() OVER (PARTITION BY group_ID ORDER BY GROUP_ID) ord, display_term
    from sys.dm_fts_parser('FORMSOF( FREETEXT, running) and FORMSOF(FREETEXT, jumping)', 1033, null, 1)) a
WHERE ord=1
  

需要sysadmin的成员资格   固定服务器角色和访问权限   指定的停止列表。

1 个答案:

答案 0 :(得分:3)

没有。你不能做这个。您无法直接访问词干分析器。

通过查看Solr源代码,您可以了解其工作原理。但它可能(我猜)将与MS SQL FT中实现的不同。

更新:事实证明,在SQL Server 2008 R2中,您可以做一些非常接近您想要的事情。添加了一个特殊的表值UDF:

 sys.dm_fts_parser('query_string', lcid, stoplist_id, accent_sensitivity)

它允许您获得标记化结果(即应用分词,词库和停止列表应用程序后的结果)。因此,如果你喂它'FORMSOF(....)'它会给你你想要的结果(好吧,你必须处理结果集)。这是相应的article in MSDN