有没有办法直接访问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的成员资格 固定服务器角色和访问权限 指定的停止列表。
答案 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。