代码之家  ›  专栏  ›  技术社区  ›  Laramie

使用SQL Server FTS词干分析器

  •  5
  • Laramie  · 技术社区  · 14 年前

    有没有办法直接访问 FORMSOF() 选择 CONTAINS 全文搜索查询,使其返回输入字的词干/屈折,而不仅仅是在搜索列中存在的派生词。

    例如,查询

    SELECT * FROM dbo.MyDB WHERE contains(CHAR_COL,'FORMSOF(INFLECTIONAL, prettier)')
    

    返回茎“漂亮”和其他变形,如“最漂亮”,如果他们存在于查尔科尔栏。我想要的是直接调用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
    

    需要系统管理员的成员资格 固定服务器角色和访问权限 指定的非索引字表。

    1 回复  |  直到 14 年前
        1
  •  3
  •   AlexS    14 年前

    不,你不能这样做。不能直接访问stemmer。

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

    更新:事实证明,在sqlserver2008r2中,您可以做一些非常接近您想要的事情。添加了一个特殊的表值自定义项:

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

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