正文内容加载中...
posted @ 2013-03-30 08:55 searchDM 阅读(149) 评论(0) 编辑
摘要: solr 有facet search ,BOBO也有;现在lucene3.4之后也有了,这个是贡献版本,在apache 官方的包里面有提供,这种功能对于分组统计和类别统计是一个很好的帮手;有了这个就不用羡慕solr了,不是我抗拒solr,只是像我们公司有时间让我们开发的情况下,我更偏向于底层点的api开发,lucene更得心应手。再说现在的solr没有近实时搜索,听说要4.0后有。废话不说,直接上代码public class Indexer { //需要索引的信息 public static String[] docTitles = { "white car", "阅读全文
posted @ 2013-03-28 10:40 searchDM 阅读(195) 评论(0) 编辑
摘要: Sphinx(狮身人面像) 想必大家都比较了解,就不作介绍了,不了解的童鞋可以自己Google。 原生的Sphinx只支持中文, 所以这里重点介绍支持中文分词的 Coreseek。 注意:Coreseek 3.2 后,只有安装 Coreseek 就可以了,它对LibMMSeg和sphinx做了整合,不用再安装原生Sphinx。(3.2前是要安装原生Sphinx,还要装补丁,非常繁琐) 安装coreseek 下面以coreseek-3.2.14为例,它基于Sphinx 0.99(不用安装Sphinx 0.99) 详细官方手册:http://www.coreseek.cn/product...阅读全文
posted @ 2011-10-17 08:41 searchDM 阅读(362) 评论(0) 编辑
摘要: Solr 是基于lucene的检索服务器。能够很快的搭建检索服务,并且提供的很多实用的组件。例如 高亮(highlight)、拼写检查(spellCheck)和匹配相位(moreLikeThis)。下面我将在我工作中接触到的一些实践与大家分 享。(我当前使用的solr 版本是 3.4,使用tomcat 7.0.21) (如果你也使用的是 tomcat 服务器,而且查询请求包含中文的话,还需要 修改 TOMCAT_HOME/conf/server.xml 的 <Connector ... URIEncoding="UTF-8"/> 使用 UTF-8 编码,详见 U阅读全文
posted @ 2011-10-17 08:31 searchDM 阅读(833) 评论(0) 编辑
摘要: 堆排序与快速排序,希尔排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。 二叉堆的定义 二叉堆是完全二叉树或者是近似完全二叉树。 二叉堆满足二个特性: 1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。 2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。 当父结点的键值总是大于或等于任何一个子节点的键值时为最大堆。当父结点的键值总是小于或等于任何一个子节点的键值时为最小堆。下图展示一个最小堆: 由于其它几种堆(二项式堆,斐波纳契堆等)用的较少,一般将二叉堆就简称为堆。 堆的存储 一般都用数组来表示...阅读全文
posted @ 2011-08-22 16:34 searchDM 阅读(103) 评论(0) 编辑
摘要: Trie,又称字典树、单词查找树,是一种树形结构,用于保存大量的字符串。它的优点是:利用字符串的公共前缀来节约存储空间。相对来说,Trie树是一种比较简单的数据结构.理解起来比较简单,正所谓简单的东西也得付出代价.故Trie树也有它的缺点,Trie树的内存消耗非常大.当然,或许用左儿子右兄弟的方法建树的话,可能会好点. 其基本性质可以归纳为:1. 根节点不包含字符,除根节点外每一个节点都只包含一个字符。 2. 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。 3. 每个节点的所有子节点包含的字符都不相同。 其基本操作有:查找 插入和删除,当然删除操作比较少见.我在这里只是实阅读全文
posted @ 2011-08-19 10:08 searchDM 阅读(110) 评论(0) 编辑
摘要: 快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影。 总的说来,要直接默写出快速排序还是有一定难度的,因为本人就自己的理解对快速排序作了下白话解释,希望对大家理解有帮助,达到快速排序,快速搞定。 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。 该方法的基本思想是: 1阅读全文
posted @ 2011-08-15 11:35 searchDM 阅读(172) 评论(2) 编辑
摘要: 归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。 //将有序数组a[]和b[]合并到c[]中 void MemeryArray(int a[], int n, int b[], int m, int c[]) { int i, j, k; i = j = k = 0; while (i < n &&阅读全文
posted @ 2011-08-11 13:45 searchDM 阅读(106) 评论(0) 编辑
摘要: Lucene支持对搜索条件的排序,一个条件或者多个条件,以及是升序还是降序,部分代码如下: stringINDEX_STORE_PATH=Server.MapPath("index");//INDEX_STORE_PATH为索引存储目录 stringkeyword=TextBox2.Text;//搜索内容 Hitsmyhit=null; IndexSearchermysea=newIndexSearcher(INDEX_STORE_PATH); QueryParserq=newQueryParser("indexcontent",newStandardA阅读全文
posted @ 2011-08-10 10:42 searchDM 阅读(149) 评论(0) 编辑
摘要: 直接选择排序和直接插入排序类似,都将数据分为有序区和无序区,所不同的是直接播放排序是将无序区的第一个元素直接插入到有序区以形成一个更大的有序区,而直接选择排序是从无序区选一个最小的元素直接放到有序区的最后。 设数组为a[0…n-1]。 1. 初始时,数组全为无序区为a[0..n-1]。令i=0 2. 在无序区a[i…n-1]中选取一个最小的元素,将其与a[i]交换。交换之后a[0…i]就形成了一个有序区。 3. i++并重复第二步直到i==n-1。排序完成。 直接选择排序无疑是最容易实现的,下面给出代码: void Selectsort(int a[], int n) { int i, j, 阅读全文
posted @ 2011-08-09 15:54 searchDM 阅读(55) 评论(0) 编辑