使用SQL Server FTS Stemmer

Lar*_*mie 5 full-text-search sql-server-2008

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

例如,查询

SELECT * FROM dbo.MyDB WHERE contains(CHAR_COL,'FORMSOF(INFLECTIONAL, prettier)')
Run Code Online (Sandbox Code Playgroud)

如果它们存在于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
Run Code Online (Sandbox Code Playgroud)

需要sysadmin固定服务器角色的成员身份以及对指定停止列表的访问权限.

Ale*_*exS 3

不,你不能这样做。您无法直接访问词干分析器。

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

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

 sys.dm_fts_parser('query_string', lcid, stoplist_id, accent_sensitivity)
Run Code Online (Sandbox Code Playgroud)

它允许您获得标记化结果(即应用断词、同义词库和停止列表应用后的结果)。因此,如果您输入“FORMSOF(....)”,它会给您想要的结果(好吧,无论如何您都必须处理结果集)。这是MSDN 中的相应文章。