hubbledotnet 例子中对搜索关键字的分词方法
public string GetKeywordAnalyzerStringFromServer(string tableName, string fieldName, string keywords, int cacheTimeout, out string bySpace) { StringBuilder sb = new StringBuilder(); sb.AppendFormat("exec SP_FieldAnalyze '{0}', '{1}', '{2}', 'sqlclient' ", tableName.Replace("'", "''"), fieldName.Replace("'", "''"), keywords.Replace("'", "''")); System.Data.DataSet dssp = new Maticsoft.BLL.job_job().JobList(sb.ToString()); StringBuilder result = new StringBuilder(); StringBuilder bySpaceSb = new StringBuilder(); foreach (System.Data.DataRow row in dssp.Tables[0].Rows) { string word = row["Word"].ToString().Replace("'", "''"); bySpaceSb.AppendFormat("{0} ", word); result.AppendFormat("{0}^{1}^{2} ", word, row["Rank"], row["Position"]); } bySpace = bySpaceSb.ToString().Trim(); return result.ToString().Trim(); }
strkeyword = GetKeywordAnalyzerStringFromServer("job_job_select", "jobTitle", keyword, int.MaxValue, out wordssplitbyspace);
分词 表名,字段(比如 title 用的 pangu ,content 用的 English ,那么如果你输入 title 就按盘古分,输入 content 就按 English 分,因为不同字段可能分词器不一样
) 要分词的关键字
如果要对词精确搜索 比如用户输入 高级程序员联想中国 只要标题中有高级程序员和联想的才显示
把上面的foreach改下就可以了
foreach (System.Data.DataRow row in table.Rows)
{
string word = String.Empty;
if(table.Rows.Count>1)
{
word = row["Word"].ToString().Replace("'", "''");
bySpaceSb.AppendFormat("{0} ", word);
result.AppendFormat("{0}^{1}^{2}^0 ", word, row["Rank"], row["Position"]);
}
else
{
word = row["Word"].ToString().Replace("'", "''");
bySpaceSb.AppendFormat("{0} ", word);
result.AppendFormat("{0}^{1}^{2}^1 ", word, row["Rank"], row["Position"]);
}
}
大家可以看出result.AppendFormat("{0}^{1}^{2}^1 ", word, row["Rank"], row["Position"]);多了一个参数这个参数0表示与1表示或
注意:这个参数只有当搜索是 contains的时候才有效,match是无效的。