关于SQL Server 2008全文搜索的问题

Ron*_*rby 11 .net c# sql sql-server full-text-search

我已经构建了一个这样的T-SQL查询:

DECLARE @search nvarchar(1000) = 'FORMSOF(INFLECTIONAL,hills) AND FORMSOF(INFLECTIONAL,print) AND FORMSOF(INFLECTIONAL,emergency)'

SELECT * FROM Tickets
WHERE ID IN (
                -- unioned subqueries using CONTAINSTABLE
                            ...
            )
Run Code Online (Sandbox Code Playgroud)

此搜索的GUI将是一个带有单个文本框的aspx页面,用户可以在其中进行搜索.

我计划以某种方式构建搜索词,就像上面的例子(@search).

不过我有些担忧:

  • 示例搜索词是否是包含搜索中所有单词变形的最佳或唯一方式?
  • 我应该分开单词并在C#或T-SQL中构造搜索词.我倾向于倾向于C#进行决策/循环/构建,但我想要你的意见.
  • 由于注入风险,我讨厌动态构建SQL.我怎能防范这个?
  • 我应该使用FREETEXTTABLE吗?有没有办法让FREETEXT找到所有单词而不是任何单词?
  • 一般来说,你还会怎么做?

Dan*_*tru 2

我最近使用了全文搜索,因此我将尝试回答您的一些问题。

\n\n

\xe2\x80\xa2 “我讨厌动态构建 sql,因为存在注入风险。我该如何防范这种情况?”

\n\n

我使用了这样的清理方法:

\n\n
static string SanitizeInput(string searchPhrase)\n    {\n        if (searchPhrase.Length > 200)\n            searchPhrase = searchPhrase.Substring(0, 200);\n\n        searchPhrase = searchPhrase.Replace(";", " ");\n        searchPhrase = searchPhrase.Replace("\'", " ");\n        searchPhrase = searchPhrase.Replace("--", " ");\n        searchPhrase = searchPhrase.Replace("/*", " ");\n        searchPhrase = searchPhrase.Replace("*/", " ");\n        searchPhrase = searchPhrase.Replace("xp_", " ");\n\n        return searchPhrase;\n    }\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x80\xa2 我应该使用 FREETEXTTABLE 吗?有没有办法让 FREETEXT 查找所有单词而不是任何单词?

\n\n

我确实使用了 FREETEXTTABLE,但我需要任何单词。正如我读过的那样(而且我读过很多),您必须使用 CONTAINSTABLE 来搜索所有单词或不同的组合。FREETEXTTABLE 似乎是一种更轻量级的解决方案,但当您需要更深入的自定义时,不适合选择。

\n