TSQL函数根据关键字解析文本
本文关键字:文本 关键字 函数 TSQL | 更新日期: 2023-09-27 17:58:30
我需要使用进入SQL Server 2008存储过程的关键字列表来构建文本相关性函数,并且正在执行自由文本搜索,该搜索返回表行列表。
对于每一行,我想要一个函数,比如"ParseForKeywords(result,listOfKeywords)AS Parsed result",以基于结果字段构建一个新字符串:
listOfkeywords将是逗号或空格分隔的单词列表。
如果结果大于100个单词,请执行以下操作:找到任何关键字的第一个出现,减去5或6个单词,然后从中开始一个新字符串,作为结果字符串的长度。
如果结果大于200个单词,则对接下来的50个单词执行与上述相同的操作,然后找到任何关键字的下一个出现,减去5或6个单词,并附加"…"。
我要寻找的是一个起点,以及关于这个逻辑最好放在哪里的一些建议:在SQL Server上,或者让。Net代码在填充DataTable单元格时执行此操作?
如果在TSQL函数中执行此操作:我将首先创建一个游标或CTE来循环使用逗号分隔的单词列表。为了找到任何单词的第一个出现,我必须循环遍历关键字的数量,以找到最低的CHARINDEX()值。
有没有办法做WHERE IN('word1','word2','word3')??
一旦找到,我会从charindex值中减去x#个字符,直到我计算出4个空格。我还需要看看这些话中是否有任何一句出现在案文的后面,届时整个过程将重复。
现在来看,它至少需要两个功能。
谢谢。
选项1:在运行查询后将此逻辑放入要调用的代码中。向包含ParseForKeywords值的结果中添加一个新列。
这是一个更简单的实现,但如果您正在分页结果,则会执行不好,因为ParseForKeywords将针对每个结果运行。
选项2:创建一个CLR函数并在查询中运行ParseForKeywords。
这可能会使您的体系结构稍微复杂一点,但在分页结果时会执行得更好。
最适合这样的任务是编写CLR StoredProcedure。互联网上有很多例子和指南。
SQL实际上是一个非常不适合解析文本关键字的地方,除非您使用全文索引。这里有一个很好的概述:
http://www.simple-talk.com/sql/learn-sql-server/understanding-full-text-indexing-in-sql-server/
在不构建全文索引的情况下,查询必须线性地解析搜索的每个字符串,这可能会使操作非常缓慢,尤其是在有很多行要搜索的情况下。
另一种选择是使用像lucene这样的软件包,在数据库之外进行全文搜索。