使用Ms SQL SERVER全文搜索来匹配单词

时间:2009-05-12 18:41:26

标签: sql-server full-text-search

我需要在sql中使用全文来编写查询,该文本按照匹配字数

的顺序返回记录

〔实施例: 在数据库中

row 1 = "brown cow" //1 match
row 2 = "lazy dog" //2 matches

用户输入:“快速的棕色狐狸跳过懒狗”

两个输入都将返回顶部的第2行

3 个答案:

答案 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)

考虑以下假设:

  1. 您的桌子已启用全文
  2. 您的表名为“example”,包含2列名为“exampleID”和“exampleText”(exampleText位于您的全文索引中)
  3. 您可以解析用户输入,如每个示例所示:
  4. 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