自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 收藏
  • 关注

转载 我的搜索优化记录(一):中文分词优化IK Analyzer

搜索绝对不仅仅是搭起框架,跑出结果就完成的工作,之后分词、排序等等的优化才是重头戏。先交代下背景:这个搜索是我一个人负责搭建并优化的项目,主要索引对象为歌曲、歌手MV等等。使用技术:Lucene、IK_Analyzer既然这篇博客是关于中文分词的优化,那么先看我现在的搜索有什么问题存在:分词不准确 (1)如果搜索"没有你陪伴"时,排序...

2015-09-24 15:27:00 371

转载 细说Lucene源码(一):索引文件锁机制

大家都知道,在多线程或多进程的环境中,对统一资源的访问需要特别小心,特别是在写资源时,如果不加锁,将会导致很多严重的后果,Lucene的索引也是如此,lucene对索引的读写分为IndexReader和IndexWriter,顾名思义,一个读,一个写,lucene可以对同一个索引文件建立多个IndexReader对象,但是只能有一个IndexWriter对象,这是怎么做到的呢?显而易见是...

2015-09-17 11:13:00 234

转载 图(一):无向图的深度优先遍历、广度优先遍历及连通分量

无向图:一些关于图的定义:图是由一组顶点和一组能够将两个顶点相连的边组成。连通图:如果从任意一个顶点都存在一条路径到达另一个任意顶点,就称为连通图,一个非连通图由若干连通的部分组成,都称为极大连通子图。无向图:即连接两个顶点的边是没有方向的。无向图的数据结构:使用邻接表来表示图:如上图所示,使用一个链表数组来表示图,其中数组的索引表示所有的顶点...

2015-09-14 09:55:00 5386

转载 查找(二):彻底理解红黑树和平衡查找树

平衡查找树在之前的二分搜索和二叉查找树中已经能够很好地解决查找的问题了,但是它们在最坏情况下的性能还是很糟糕,我们可以在查找二叉树中,每次动态插入或删除某结点时,都重新构造为完全二叉树,但是这样代价太大,所以就引出了平衡查找树。详细的数学定义就不给出了,因为既不直观也记不住,直接给出一个平衡二叉树的图:相信这个图一看就明白了,平衡查找树(以下简称BST或2-3查找树...

2015-09-10 10:42:00 125

转载 查找(一):二分查找和二叉查找树

二分查找二分查找的原理很简单:在一个有序数组中(本文讨论的是升序,降序同理)从数组中间的元素开始,如果A[mid]大于被查找元素key,那么就在A[0]到A[mid-1]中查找,反之在A[mid++]到A[A.lenth - 1]中查找。从这看来,递归的意味又很浓啊,当然也可以用非递归的方式,效率更高,意味二分查找比较简单,就直接上代码了:定义一个查找抽象基类...

2015-09-09 11:23:00 120

转载 排序算法(四):优先队列、二叉堆以及堆排序

优先队列我们经常会碰到下面这种情况,并不需要将所有数据排序,只需要取出数据中最大(或最小)的几个元素,如排行榜。那么这种情况下就可以使用优先队列,优先队列是一个抽象数据类型,最重要的操作就是删除最大元素和插入元素,插入元素的时候就顺便将该元素排序(其实是堆有序,后面介绍)了。二叉堆二叉堆其实是优先队列的一种实现,下面主要讲的是用数组实现二叉堆。先上...

2015-09-07 12:35:00 116

转载 排序算法(三):快速排序和三向快速排序

快速排序快速排序是一种分治的排序算法。它将一个数组分成两个子数组,将两部分独立的排序。快速排序和归并排序是互补的:归并排序将数组分成两个子数组分别排序,并将有序的子数组归并以将整个数组排序;而快速排序将数组排序的方式则是当两个子数组都有序时整个数组也就自然有序了。在归并排序中,递归调用发生在处理整个数组之前,而快速排序中,递归调用发生在处理整个数组之后。快速排序算法是最快的通用排...

2015-09-06 15:37:00 152

转载 排序算法(二):归并排序

归并排序归并排序基本的操作是合并两个已排序的数组,如下面的例子:A:{1,2,4,7}B:{2,2,5,9}第一步:比较A[0]和B[0],A[0]<B[0],将A[0]复制到C[0]中,得到C{0}第二步:比较A[1]和B[0],A[1]=B[0],将A[1]复制到C[0]中,得到C{1,2}。循环以上步骤,即得到排序后的序列:C...

2015-09-05 14:43:00 110

转载 排序算法(一):选择排序、插入排序和希尔排序

一些说明我将会写一系列关于算法的博客,因为我是程序员,并不是计算机科学家,也即我是搞工程的,并不是搞学术的,所以对于我来说,最重要的就是1.有哪些算法2.这些算法的原理3.这些算法的实现4.这些算法的效率而其他的,相对而言,并没有那么重要,比如算法的证明,所以以后的博客都会按照上述的思维撰写。一、首先定义一个抽象类,里面集成了排序算法所需要的共同的...

2015-09-04 18:53:00 133

转载 Ternary Search Tree 应用--搜索框智能提示

前面介绍了Ternary Search Tree和它的实现,那么可以用Ternary Search Tree来实现搜索框的只能提示,因为Ternary Search Tree的前缀匹配效率是非常高的,总体思路如下(其中很多可以根据自己的需要修改,我只是写出我的做法):比如搜索歌曲时智能提示:建立Ternary Search Tree 将所有歌曲名的字符串放置在一个ma...

2015-06-18 14:29:00 104

转载 Ternary Search Tree Java实现

/** * @author Edwin Chen * *///定义节点class Node { //存储字符串 char storeChar; //是否完成单词 boolean isComplete; Node leftChild,centerChild,rightChild; ...

2015-06-16 18:22:00 197

转载 Trie和Ternary Search Tree介绍

Trie树 Trie树,又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构,如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树。Trie树与二叉搜索树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀(prefix),也就是这个节点对应的字符串,而根节点对应空字符串。一般情况下,不是所有的节点都有对应的值,只有叶子节...

2015-06-16 11:19:00 430

转载 索引时利用K-邻近算法过滤重复歌曲

最近一直在做公司搜索的优化与维护,做完索引和搜索的分离之后,又有一个新需求,因为做的是歌曲方面的搜索,所以在数据库中有多个同歌名,同演唱者的的数据,这样在用户搜索的时候,会出来一大堆不同版本的歌曲,影响搜索质量,所以需要在建立索引库时做一个初步的过滤,因为只是一个简单的过滤,所以并不需要太精确。首先呢是要确定哪些歌曲需要过滤,我调研后觉得对于同一歌名,同一演唱者的歌曲数量大于10时,...

2015-06-04 15:16:00 97

转载 Sql排名和分组排名

在很多时候,都有排名这个功能,比如排行榜,并且还需要分页的功能,一般可以再select的时候按照某一字段 oorder by XX desc,这样limit 查找就可以得到排名信息,但是有时候是需要多表连接,或者是有一个随机查看,在页面上并不是按照排名升降序。这个时候就需要用SQL来实现排名。先准备测试数据:Table: CREATE TABLE `test`...

2015-04-15 20:12:00 647

转载 Lucene和jackson冲突

今天在使用lucene的时候,想直接在Controller中返回json对象,于是在Spring中配置了JackSon的converter:<bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"&...

2015-03-27 17:31:00 98

转载 Lucene自定义扩展QueryParser

Lucene版本:4.10.2在使用lucene的时候,不可避免的需要扩展lucene的相关功能来实现业务的需要,比如搜索时,需要在满足一个特定范围内的document进行搜索,如年龄在20和30岁之间的document中搜索并排序。其实lucene自带的NumericRangeQuery类已经能实现这个功能了,如下:public void testInclusive(...

2015-02-02 16:10:00 129

转载 windows下Socket链接溢出

最近在windows下使用通过多线程使用jdbc操作数据库,在线程数设置为5,并且每个线程执行完成后Sleep(1000),在这种情况下,竟然还会报错:java.net.SocketException No buffer space available (maximum connections reached) JVM_Bind一看这个错误类型,应该是属于Socket连接没有关闭...

2015-01-06 14:51:00 303

转载 Mysql事务及行级锁的理解

在最近的开发中,碰到一个需求签到,每个用户每天只能签到一次,那么怎么去判断某个用户当天是否签到呢?因为当属表设计的时候,每个用户签到一次,即向表中插入一条记录,根据记录的数量和时间来判断用户当天是否签到。这样的话就会有一个问题,如果是在网速过慢的情况下,用户多次点击签到按钮,那么变会发送多次请求,可能会导致一天多次签到,重复提交的问题,那么很自然的想到用事务。这次用的...

2014-12-18 15:32:00 424

转载 Spring事务管理使用

发现问题最近,碰到一个问题,再用spring实现事务管理的时候,发现不起作用,在出异常时,并不会回滚数据库操作。我想实现的功能如下:@Transactional(isolation=Isolation.DEFAULT,readOnly=false,propagation=Propagation.REQUIRED,rollbackFor=Exception.class)...

2014-12-02 16:07:00 84

转载 Java内部类实现伪方法级多线程

最近碰到一个问题,就是用户在填写相关信息提交后,后台需要将一些文件同步到另外一台服务器,而这个时候,由于用的是spring的框架,导致前端页面需要等待文件同步完成,才能弹出提示信息。相信大家在很多时候都会碰到这种问题,比如收发邮件,也会等待邮件发送完成,等等。于是便很自然的想到多开一个线程去处理一些比较耗时的任务。但是java本身只提供类级别的多线程,如下:继承Thread类...

2014-11-18 18:39:00 86

转载 Mybatis高级映射、动态SQL及获得自增主键

一、动态SQL相信大家在用mybatis操作数据库时时都会碰到一个问题,假如现在我们有一个关于作者的list authorList,需要根据authorList里已有的作者信息在数据库中查询相应作者的博客信息。那么最容易想到的做法就是遍历authorList,获取相应的信息查询数据库。 for(int i=0;I < authorList.size();i++...

2014-11-18 11:33:00 174

转载 Python 线程池的原理和实现及subprocess模块

最近由于项目需要一个与linux shell交互的多线程程序,需要用python实现,之前从没接触过python,这次匆匆忙忙的使用python,发现python确实语法非常简单,功能非常强大,因为自己是从零开始使用python,连语法都是现学的,所以将一些使用记录下来,希望能帮到大家。使用python的需求简单的说是调用liunux下的ffmpeg获取音频的一些信息,需要用多线程实...

2014-10-30 09:49:00 358

转载 七、Solr服务部署和安全

概念:我们知道,Solr是以webapp的形式运行的,那么我们只需要把Solr.war文件部署到web容器中,便可以运行了,但是因为需要连接数据库做索引并且提供线上的服务调用query接口,那么Solr的安全性是需要考虑的。因为Solr并没有自带Ip访问限制。那么我们需要自己来实现。思路是将Solr导入到普通web project中,然后加上相应的类去实现Ip访问限制的功能...

2014-09-23 15:34:00 134

转载 JDK版本错误:Unsupported major.minor version 51.0

错误原因有时候把项目从本机编译文件部署到服务器,或者发给别人使用时,会报如下异常:java.lang.UnsupportedClassVersionError: test_hello_world :Unsupported major.minor version 51.0at java.lang.ClassLoader.defineClass1(Native Method)...

2014-09-18 16:51:00 3594

转载 六、Solr高亮与Field权重

Solr高亮 原理 做搜索时,高亮是很常见的需求,那么Solr肯定也为高亮提供了支持。先解释下Solr高亮的原理,在我们设置了需要高亮显示的Field之后,查询得到的返回结果会多出来下面的内容: "highlighting": {"519": {"Artist_Name": ["<em>周杰伦</em>"]}...

2014-09-17 16:16:00 230

转载 五、SolrJ、Request Handler

什么是SolrJ 既然Solr是以单独的WebApp形式存在的,那么Solr理应提供与Solr通信的Api吧,对的,这就是SolrJ,既然与solr通信是通过url,那么其实我们也可以不用SolrJ,因为可以拼字符串的嘛。 http://localhost:8983/solr/Artist/select?q=Artist_Name:周杰伦&wt=json&inde...

2014-09-17 09:38:00 89

转载 四、Solr数据源配置(JNDI、DIH)及定时重做索引

简介 Solr支持很多种创建索引的方式,包括网页,xml以及数据库,因为我这边做的是企业级的搜索,所以用的是数据库建立索引。其实从数据库建立索引,很大程度上取决于原来的数据库设计。 从数据库建立索引,solr官方是提供一个工具的—Data Import Handler。在下载的solr中可以找到相关的jar包: solr-dataimporthandler-4.9.0.jar...

2014-09-16 15:52:00 138

转载 三、Solr多核心及分词器(IK)配置

多核心的概念 多核心说白了就是多索引库。也可以理解为多个"数据库表" 说一下使用multicore的真实场景,比若说,产品搜索和会员信息搜索,不使用多核也没问题,这样带来的问题是 indexs文件很多,而且产品的索引文件和会员信息的索引文件混在一起,备份也是个问题。 如果使用了多核,那就很轻松了,产品和会员就可使用不同的URL进行提交了,业务上也很清晰,生成的索引文件也不会混在一...

2014-09-16 09:47:00 128

转载 二、Solr安装(Tomcat)

安装环境Windows 7 64bitApache-tomcat-8.0.9-windows-x64Solr-4.9.0JDK 1.8.0_05 64bit安装步骤Tomcat和JDk的安装在这里就略过。注意:solr4.9要求jdk1.7+步骤一:解压solr-4.9.0到任意文件夹,我解压到D:\Installed Applic...

2014-09-15 23:04:00 91

转载 一、Solr综述

什么是Solr搜索 我们经常会用到搜索功能,所以也比较熟悉,这里就简单的介绍一下搜索的原理。 当然只是介绍solr的原理,并不是搜索引擎的原理,那会更复杂。 流程图 这是一个非常简单的流程图: User:即需要搜索的用户。 Raw Data:需要搜索的内容,当然是源数据,可能是文本文件,可能是数据库的数据,可能是XML等等。 Index:有格式的数据。 ...

2014-09-15 15:25:00 107

转载 数据库存储过程 — Sql Server

Mysql、Oracle等主流关系型数据库基本都支持存储过程,这里使用Sql Server为例进行说明。存储过程的概念:Sql Server存储过程SQL Server 中的存储过程是由一个或多个 Transact-SQL 语句或对 Microsoft .NET Framework 公共语言运行时 (CLR) 方法的引用构成的一个组。 简单的说,非常类似与java中的方法,实...

2014-07-25 16:53:00 170

转载 Spring Data Redis—Pub/Sub(附Web项目源码)

一、发布和订阅机制  当一个客户端通过 PUBLISH 命令向订阅者发送信息的时候,我们称这个客户端为发布者(publisher)。  而当一个客户端使用 SUBSCRIBE 或者 PSUBSCRIBE 命令接收信息的时候,我们称这个客户端为订阅者(subscriber)。为了解耦发布者(publisher)和订阅者(subscriber)之间的关系,Redis 使用了 ch...

2014-07-10 17:55:00 144

转载 Spring Data Redis简介以及项目Demo,RedisTemplate和 Serializer详解

一、概念简介:Redis:  Redis是一款开源的Key-Value数据库,运行在内存中,由ANSI C编写,详细的信息在Redis官网上面有,因为我自己通过google等各种渠道去学习Redis,走了不少弯路,所以总结一条我认为不错的学习路径给大家:  1.《The Little Redis Book》是一本开源PDF,只有29页的英文文档,看完后对Redis的基本概...

2014-06-30 17:53:00 349

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除