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

c# – 将搜索字符串转换为FullText兼容的搜索字符串?

发布时间:2020-12-15 08:07:12 所属栏目:百科 来源:网络整理
导读:我正在使用MSSQL 2008的全文搜索引擎,它需要一个像这样的搜索字符串: ("keyword1" AND "keyword2*" OR "keyword3") 我的用户输入的内容如下: engine 2009"san francisco" hotel december xyzstuff* "in miami" 1234something or "something else" 我正在尝
我正在使用MSSQL 2008的全文搜索引擎,它需要一个像这样的搜索字符串:
("keyword1" AND "keyword2*" OR "keyword3")

我的用户输入的内容如下:

engine 2009
"san francisco"     hotel december xyz
stuff* "in miami"   1234
something or "something else"

我正在尝试将这些转换为全文引擎兼容的字符串,如下所示:

("engine" AND "2009")
("san francisco" AND "hotel" AND "december" AND "xyz")
("stuff*" "in miami" "1234")
("something" OR "something else")

我有一个非常困难的时间,尝试使用计数引号,空格和插入等,但我的代码看起来像可怕的呕吐物.

有人可以帮忙吗?

解决方法

干得好:
class Program {
    static void Main(string[] args) {
        // setup some test expressions
        List<string> searchExpressions = new List<string>(new string[] { 
            "engine 2009",""san francisco"     hotel december xyz","stuff* "in miami"   1234 ","something or "something else""
        });

        // display and parse each expression
        foreach (string searchExpression in searchExpressions) {
            Console.WriteLine(string.Concat(
                "User Input: ",searchExpression,"rntSql Expression: ",ParseSearchExpression(searchExpression),"rn"));
        }

        Console.ReadLine();

    }

private static string ParseSearchExpression(string searchExpression) {
    // replace all 'spacecharacters' that exists within quotes with character 0
    string temp = Regex.Replace(searchExpression,@"""[^""]+""",(MatchEvaluator)delegate(Match m) {
        return Regex.Replace(m.Value,@"[s]","x00");
    });

    // split string on any spacecharacter (thus: quoted items will not be splitted)
    string[] tokens = Regex.Split(temp,@"[""s]+",RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture);

    // generate result
    StringBuilder result = new StringBuilder();
    string tokenLast = string.Empty;
    foreach (string token in tokens) {
        if (token.Length > 0) {
            if ((token.Length > 0) && (!token.Equals("AND",StringComparison.OrdinalIgnoreCase))) {
                if (result.Length > 0) {
                    result.Append(tokenLast.Equals("OR",StringComparison.OrdinalIgnoreCase) ? " OR " : " AND ");
                }
                result.Append(""").Append(token.Replace(""","""").Replace("x00"," ")).Append(""");
            }
            tokenLast = token;
        }
    }
    if (result.Length > 0) {
        result.Insert(0,"(").Append(")");
    }

    return result.ToString();
}
}

(编辑:李大同)

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

    推荐文章
      热点阅读