昨天产品提了个需求,用户搜索‘Q币充值’,只要包含‘Q币’的产品都要搜索出来,我们知道,通常情况搜索是把整个字符串进行模糊查询,这种需求应该怎么解决,我们来看看
//首先引用两个DLL文件,再引用这三个命名空间,DLL文件底下会给链接
using Lucene.Net;
using Lucene.Net.Analysis;
using Lucene.China;
public ActionResult Index()
{
StringBuilder sb = new StringBuilder();
sb.Remove(0, sb.Length);
string t1 = "";
int i = 0;
Analyzer analyzer = new Lucene.China.ChineseAnalyzer();
string rich = "Q币人外热发给34645……&*";
StringReader sr = new StringReader(rich);
TokenStream stream = analyzer.TokenStream(null, sr);
long begin = System.DateTime.Now.Ticks;
Token t = stream.Next();
while (t != null)
{
t1 = t.ToString(); //显示格式: (关键词,0,2) ,需要处理
t1 = t1.Replace("(", "");
char[] separator = { ',' };
t1 = t1.Split(separator)[0];
sb.Append(i + ":" + t1 + "\r\n");
t = stream.Next();
i++;
}
ViewBag.rich = rich;
ViewBag.richSp = sb.ToString();
long end = System.DateTime.Now.Ticks; //100毫微秒
int time = (int)((end - begin) / 10000); //ms
ViewBag.richTime = "耗时" + (time) + "ms \r\n=================================\r\n";
return View();
}
代码分析:
1、因无源码,词库文件只能放在指定的路径下
2、因无源码,大小写字母此处不区分,无法修正
3、不支持标点符号拆分
4、网上很大一部分的分词代码都是摘自飘易的博客,不如直接看他的。
如果想要有源码的,网上也有一些大佬自己写的分词,几乎用不上这个功能也就没去验证
PS: dll文件下载地址 http://www.piaoyi.org/upimg/file071127_08/02/ChineseAnalyzer.rar
里面包含winform版的demon,摘自 http://www.piaoyi.org/c-sharp/ChineseAnalyzer.html