我需要在sql中使用全文来编写查询,该文本按照匹配字数
的顺序返回记录〔实施例: 在数据库中
row 1 = "brown cow" //1 match
row 2 = "lazy dog" //2 matches
用户输入:“快速的棕色狐狸跳过懒狗”
两个输入都将返回顶部的第2行
答案 0 :(得分:1)
我没有看到任何原生这样做的东西。您可能必须创建一个函数,将结果与搜索字符串进行比较,以确定存在多少匹配。
然后,您可以将自由文本搜索的结果传递给该函数,该函数将返回匹配计数。最后,您可以按匹配计数对结果进行排序。
答案 1 :(得分:1)
在MS SQL中,对于游击方法,您可以执行以下操作:
select * from MATCHTABLE where patindex('%'+MATCHCOLUMN+'%','The quick brown fox jumps over the lazy dog')>0
其中MATCHTABLE是包含两个示例行的表,MATCHCOLUMN是带有文本的列名。
然而,使用这种方法的表现不会像全文搜索那样。
答案 2 :(得分:1)
考虑以下假设:
parsedUserInput =''','quick','brown','fox','jumps','over','the','lazy','dog'
然后我认为你要找的是这样的:
SELECT display_term as term
,document_count as numberOfOccurences
FROM sys.dm_fts_index_keywords (db_id(),object_id('example'))
WHERE display_term IN({parsedUserInput})
否则,排名对你有用......
parsedUserInput =“”或“快速”或“棕色”或“狐狸”或“跳”或“过”或“”或“懒”或“狗”
SELECT
ranks.rank AS rank
,e.exampleID
FROM example e
INNER JOIN CONTAINSTABLE ( example, exampleText, ' **{parsedUserInput}** ' ) AS ranks
ON e.exampleID = ranks.[KEY]
WHERE ranks.rank > 0 -- return only rows that have a rank
order by ranks.rank desc