我使用 CONTAINSTABLE 查询与 MS SQL Server 的全文索引引擎在文本列中进行搜索;例如。:
SELECT *
FROM MyTable
INNER MERGE JOIN CONTAINSTABLE(MyTable, sDescription, 'FORMSOF(INFLECTIONAL, "brains")')
AS TBL1 ON TBL1.[key]=MyTable.ixKey
这可以很好地查找包含“brains”(例如“brain”、“brained”)等词的描述的行。但是,当我向用户显示这些结果时,我想突出显示与他们的查询匹配的单词(就像 Google 一样)。但我不能只在结果中查找搜索词:如果结果包含“brain”,我显然无法突出显示“brains”。
SQL Server 能否告诉我全文匹配发生在列(单词或字符)中的哪个位置?或者,我可以手动运行词干分析器来获取搜索词的所有形式吗?那么我可以分别突出显示其中每一个。
SQL Server 2008 包含一个使用全文引擎的解析器获取单词或短语的变形形式的函数:sys.dm_fts_parser http://technet.microsoft.com/en-us/library/cc721269(SQL.100).aspx#_Toc202506241.
SELECT display_term, source_term, occurrence FROM sys.dm_fts_parser('FORMSOF(INFLECTIONAL, "brains")', 1033, 0, 0)
得到一个像这样的表:
display_term | source_term | occurrence
---------------------------------------
brain | brains | 1
brains | brains | 1
brained | brained | 1
(使用查询短语需要更多工作,因为它会单独改变每个单词,但将它们重新组合在一起并不难。)
现在我可以突出显示任何变形形式的出现。这比 SQL Server 直接告诉我 FTS 匹配在哪里要多一些工作,但它会做。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)