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是无效的。

原文地址:https://www.cnblogs.com/freexiaoyu/p/2074347.html