感谢枫伶忆

http://www.cnblogs.com/fenglingyi/p/4708006.html

自从了解到搜索优化,分词和权重之后,一直苦于没有结构化的培训数据来做搜索,现在总算可以体验一把了。枫伶忆大大发表博客后半天时间 我就开始在博客园上爬数据,结果爬了一晚上才爬了12w条数据存到数据库,还是比较担心博客园崩溃的,毕竟可以预想到,会有多少人同时开始在博客园爬数据了,嘿嘿 还好没啥事。

刚把图表做出来时别提有多激动了,成就感啊。慢慢的发现然并卵啊。不过我的初衷不是这个,我还是要做搜索,现在数据有了,那就开工呗。

一开始我就按普通查询来搜索数据库,发现模糊搜索并不能令我满意,再对比一下百度,完全就是渣啊。然后就有了分词的想法,想到就做

char[] slist = keyword.ToCharArray();

将输入关键字分解成一个个字符,然后去拼接sql,结果自然不满意  因为查到的数据太杂乱了  再对比下百度,还是渣啊。怎么办呢  为毛人家搜索出来的东西就是准确率那么高呢,我想到了权重 然后大量查资料,得到了如下的sql

SELECT TOP 15 BlogTitle,BlogTime,BlogUrl FROM BlogActicle WHERE  (BlogId >(SELECT MAX(BlogId) FROM (SELECT TOP 20 BlogId FROM BlogActicle ORDER BY BlogId) AS T ) ) and  BlogTitle like '%" + keyword + "%'" + substr + " ORDER BY (case when BlogTitle like '%" + keyword + "%' then 3 when BlogTitle like '%" + (keyword.Length > 1 ? slist[0] + slist[1] : slist[0]) + "%' then 2 when BlogTitle like'%" + slist[0] + "%'" + substr + " then 1 end ) desc

我将权重设为3级 完全匹配关键字的 设为3 匹配2个字的设为2 匹配一个就为1 然后将权重排序 便会将权重最高的排在前

然后再对比百度,尼玛 人家关键字是高亮显示,费了一番功夫 从网上剽窃下来一段代码

  //切词替换成高亮public static string HighlightKeyword(string str, char[] keywordValues){int index;string highlightBegin = "<>";string highlightEnd = "</>";for (int i = 0; i < keywordValues.Length; i++){int startIndex = 0; int length = highlightBegin.Length + keywordValues[i].ToString().Length; int lengthHighlight = length + highlightEnd.Length; var temp = str.ToLower(); var temp1 = keywordValues[i].ToString().ToLower(); while((index = str.IndexOf(keywordValues[i].ToString(), startIndex, StringComparison.OrdinalIgnoreCase)) > -1) { str = str.Insert(index, highlightBegin).Insert(index + length, highlightEnd); startIndex = index + lengthHighlight; } } //将<>字符串替换<em> str = str.Replace("<>", "<em>").Replace("</>", "</em>"); return str; }

最后得到效果图如下:

看到logo和样式是不是很熟悉呀,没错,就是百度的样式被我扒下来了。

接下来有做了用户输入历史记录匹配

然后再去看本地的txt文件里面都是我的输入记录,不禁感觉有点后怕,尼玛 平常用搜索引擎查东西  百度和浏览器 手机UC 记录了我多少个人记录,太没安全感了 。

接下来地球人已经阻挡不了我要做全文搜索了。但是数据库数量太多 单个字段 表查还好,全局那不得龟速啊 怎么办呢,经常逛博客园 当然知道 检索神器Lucene 了。还有盘古分词

转载于:https://www.cnblogs.com/jingch/p/4763692.html

一步一步做搜索(一)相关推荐

  1. 一步步带你做vue后台管理框架(三)——登录功能

    系列教程<一步步带你做vue后台管理框架>第三课 github地址:vue-framework-wz 线上体验地址:立即体验 <一步步带你做vue后台管理框架>第一课:介绍框架 ...

  2. 反思走火入魔 急功近利:一步一步的做 一步一步的走 顺其自然 水到渠成

    有时候学知识的时候急于求成,心里预期超过规律所允许的进度,就会容易导致 气急败坏  走火入魔  焦虑不安 心里不安静 混乱不堪 要求多久做完没有坏处,产生坏处的急于完成的急切心情,会导致自己走火入魔. ...

  3. 一步一步做项目(3)创建Web项目

    一步一步做项目(3)创建Web项目 创建Web项目 配置git 保存到Github上 创建Web项目 启动eclipse,执行File->New->Dynamic Web Project, ...

  4. 一步一步做ListView滚动固定头部并且头部会变化哦

    手机QQ好友列表中,组名在滚动的时候会固定在头部,等到这个组全部滚完后,组名也会随着向上滚动.在ListView也可以实现这么的效果. 如上所示:listview中分类显示,每一个类别有一个catal ...

  5. 一步步带你做vue后台管理框架(二)——上手使用 系列教程《一步步带你做vue后台管理框架》第二课

    github地址:vue-framework-wz 线上体验地址:立即体验 <一步步带你做vue后台管理框架>第一课:介绍框架 <一步步带你做vue后台管理框架>第二课:上手使 ...

  6. 【学术素养】做学问,你必须脚踏实地,一步一步去寻找未知,没有捷径可走

    近日,美国克瑞顿大学(Creighton University)开除了一位来自中国的研究生. 这位被开除研究生的导师袁劲梅教授,郑重地写下了长长的一封信,坦言:我就不该录取你! 这封信字字珠玑.发人深 ...

  7. 一步一步教你做ios推送 pem证书制作 php推送

    一步一步教你做ios推送 分类: ios2013-03-03 21:48 3385人阅读 评论(8) 收藏 举报 ios推送客户端服务器 最近在研究ios的推送问题,遇到了一些问题,最终整理了一下.放 ...

  8. vue族谱架构_一步步带你做vue后台管理框架(一)——介绍框架

    系列教程<一步步带你做vue后台管理框架>第一课 线上体验地址:立即体验 Features 特性

  9. 社交电商怎么做?只需要五步,就可以做社交电商赚钱?

    移动互联网快速的发展下,越来越多的企业家朋友,开始重视社交电商这个领域,其实早在从2014年提出"新零售"这个概念之后,就有许多的朋友,有在观望的.注视的.忐忑的.没有方向的,直至 ...

最新文章

  1. postgresql开发中可能有用的知识
  2. UEStudio使用技巧三则
  3. c++函数模板(c++细节篇十)
  4. 通过SSH克隆远程仓库(GitLab)到本地
  5. 学习计划2016//12/12
  6. 我常用的python函数(part1)--内置函数isinstance
  7. android studio shell 命令行自动打包(mac 平台)
  8. mysql in and in_完美解决mysql in条件语句只读取一条信息问题的2种方案
  9. C#學習基礎------事件和索引指示器
  10. [转]wxParse-微信小程序富文本解析组件
  11. crsctl stop crs 与 crsctl stop resources的区别
  12. vim使用方法的总结摘自鸟哥的私房菜
  13. Excel-VBA基础(11):VBA中数组基础知识
  14. 方便的Unity真机调试工具:LogViewer
  15. 一些实用的小网站、小工具、软件
  16. 计算机上打印机删除不了怎么办,win7系统的打印机删除不掉怎么办?完美解决方法看这里!...
  17. ckplayer6.8修改logo
  18. 如何学会学习——读唐老师博文有感
  19. 18个月自学AI,2年写就三万字长文,过来人教你如何掌握这几个AI基础概念
  20. Windows 下使用anaconda虚拟环境pip install 安装pytorch出现报错There was a problem confirming the ssl certificate

热门文章

  1. 无人驾驶、自动驾驶与驾驶辅助的区别
  2. GolVe向量化做文本分类
  3. 谈谈Tensorflow的Batch Normalization
  4. 梯度下降法快速教程 | 第三章:学习率衰减因子(decay)的原理与Python实现
  5. sorted函数python_python中排序函数sort,sorted和operator.itemgetter的使用
  6. 怎么查看XP电脑服务器型号,xp怎么查看电脑配置
  7. Centos 安装 JDK8
  8. java火焰纹章攻略女神之剑_《火焰纹章风花雪月》白云之章-女神再生仪式图文攻略...
  9. java 防止js注入_在WebView中如何让JS与Java安全地互相调用
  10. Node.js-Express框架