加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 关于SQL Server 2008全文搜索

发布时间:2020-12-15 03:51:59 所属栏目:百科 来源:网络整理
导读:我已经建立了一个这样的T-SQL查询: DECLARE @search nvarchar(1000) = 'FORMSOF(INFLECTIONAL,hills) AND FORMSOF(INFLECTIONAL,print) AND FORMSOF(INFLECTIONAL,emergency)'SELECT * FROM TicketsWHERE ID IN ( -- unioned subqueries using CONTAINSTABL
我已经建立了一个这样的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
                            ...
            )

此搜索的GUI将是一个aspx页面,其中包含用户可以搜索的单个文本框.

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

但我有一些担忧:

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

解决方法

我最近使用全文搜索,所以我会尝试回答你的一些问题.

?“我讨厌由于注入风险而动态构建sql,我该如何防范?

我使用像这样的消毒方法:

static string SanitizeInput(string searchPhrase)
    {
        if (searchPhrase.Length > 200)
            searchPhrase = searchPhrase.Substring(0,200);

        searchPhrase = searchPhrase.Replace(";"," ");
        searchPhrase = searchPhrase.Replace("'"," ");
        searchPhrase = searchPhrase.Replace("--"," ");
        searchPhrase = searchPhrase.Replace("/*"," ");
        searchPhrase = searchPhrase.Replace("*/"," ");
        searchPhrase = searchPhrase.Replace("xp_"," ");

        return searchPhrase;
    }

?我应该使用FREETEXTTABLE吗?有没有办法使FREETEXT寻找所有的单词而不是任何的?

我使用FREETEXTTABLE,但我需要任何一个字.就像我已经读过的一样(我已经读了很多),你必须使用CONTAINSTABLE来搜索所有的单词或不同的组合. FREETEXTTABLE似乎是更轻的解决方案,但是当您想要更深入的自定义时,它不是选择的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读