.Net源码论坛 [ 繁体中文 ]

发新话题 回复该主题

实现类似于baidu的那种用空格键的分词查询(转) [复制链接]

楼主
【全文】
  1. ///
  2.   /// 实现类似于baidu的那种用空格键的分词查询
  3.   ///
  4.   /// 要查询表的字段集合
  5.   /// 要查询的表名
  6.   /// 查询的关键字
  7.   /// 查询的模式
  8.   /// 具体的查询语句
  9.   private string GetSearchWord(string[] tableField ,string tableName ,string strKeyword ,string strSearchMode)
  10.   {
  11.    StringBuilder strCondition = new StringBuilder();
  12.    string [] KeywordArray;
  13.    string strTemp = "";
  14.             strCondition.Append("SELECT ");
  15.    string strWhere ="";
  16.    // 获得要查询表的字段名称
  17.    foreach(string sqlField in tableField)
  18.    {
  19.     strWhere += sqlField + "," ;
  20.    }
  21.    strWhere = strWhere.TrimEnd(new char[]{','});
  22.    strCondition.Append(strWhere + " FROM "+tableName+" WHERE ");
  23.   
  24.    if(strKeyword.IndexOf(',')!=-1)
  25.     KeywordArray=strKeyword.Split(',');
  26.    else
  27.     if(strKeyword.IndexOf('|')!=-1)
  28.     KeywordArray=strKeyword.Split('|');
  29.    else
  30.     KeywordArray=strKeyword.Split(null);
  31.    // 完全匹配模式
  32.    if(strSearchMode == "1")
  33.    {
  34.      strWhere="";
  35.     foreach(string sqlField in tableField)
  36.     {
  37.       strWhere += sqlField + "+";
  38.     }
  39.     strWhere=strWhere.TrimEnd(new char[] {'+'});
  40.     strTemp += strWhere + " like '%"+strKeyword+"%'";
  41.    }
  42.    else
  43.    {
  44.     // 部分匹配模式
  45.     if(strSearchMode=="2")
  46.     {
  47.      strWhere = "";
  48.      foreach(string sqlField in tableField)
  49.      {
  50.       strWhere += sqlField + "+";
  51.      }
  52.      strWhere=strWhere.TrimEnd(new char[] {'+'});
  53.      strTemp += strWhere + " like '";
  54.      strWhere="";
  55.      for (int i=0;i     {
  56.       strWhere+="%"+KeywordArray[i];
  57.      }
  58.      strTemp+=strWhere +"%'";
  59.     }
  60.     // 单词匹配模式
  61.     if(strSearchMode=="3")
  62.     {
  63.      strWhere="";
  64.      foreach(string sqlField in tableField)
  65.      {
  66.       strWhere +=" "+ sqlField + "+";
  67.      }
  68.      strWhere=strWhere.TrimEnd(new char[] {'+'});
  69.   
  70.      string strSqlKeyword="";
  71.      for (int i=0;i     {
  72.       strSqlKeyword+=strWhere+" like" +" '%"+KeywordArray[i]+"%' or";
  73.      }
  74.      strSqlKeyword=strSqlKeyword.TrimEnd(new char[] {'o','r'});
  75.      strTemp +=strSqlKeyword;
  76.     }
  77.    }
  78.    return strCondition.Append(strTemp).ToString();
  79.   }
复制代码
分享 转发
客服QQ:4000410510
咨询电话:4000-410-510(只收市话费)
TOP
沙发

学习  学习
到可道非常道
TOP
板凳

efwfewf
创新思想,智能决策
TOP
发新话题 回复该主题