摘要: 序列化是什么: 序列化就是将一个对象的状态(各个属性量)保存起来,然后在适当的时候再获得。Java的序列化机制是RMI、EJB、JNNI等技术的技术基础。 序列化分为两大部分:序列化和反序列化。序列化是这个过程的第一部分,将数据分解成字节流,以便存储在文件中或在网络上传输。反序列化就是打开字节流并重构对象。对象序列化不仅要将基本数据类型转换成字节表示,有时还要恢复数据。恢复数据要求有恢复数据的对象实例序列化的什么特点: 如果某个类能够被序列化,其子类也可以被序列化。声明为static和transient类型的成员数据不能被序列化。因为static代表类的状态, transient代表对象... 阅读全文
posted @ 2013-04-23 23:54 Dream-Weaver 阅读(321) 评论(0) 推荐(0) 编辑
摘要: 1.<ramBufferSizeMB>32</ramBufferSizeMB>。solrconfig中的这个配置,如果对于过于大型的应用,这个配置必须修改。这是建索引时的设置内存大小。2.一个商品属于,类别---》子类别--》子子类别 ,想在所有类别中都能查询到该商品。 做法:讲该商品的父子结果查询出来。需要新加入一个索引字段,并构建成 类别id-子类别id-子子类别id :例如 1-11-111 默认的我们只知道,商品的直接信息中只能拿到它的最末级类别id。可以通过最末级类别信息,查询到商品。 我们必须自定义solr类型。就像定义中文的分词类型一样,在schama.x 阅读全文
posted @ 2013-04-23 16:13 Dream-Weaver 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 在和solr搭配的tomcat中去除日志:org.apache.solr.level = WARNING 阅读全文
posted @ 2013-04-23 16:12 Dream-Weaver 阅读(213) 评论(0) 推荐(0) 编辑
摘要: solr在这方面做的很给力啊。在配置文件中已经明确的说明了。 1.如果是主索引服务器(这个服务器最好只负责对主索引库,与数据库进行数据的同步)。 <requestHandler name="/replication" class="solr.ReplicationHandler" > <lst name="master"> <!--当执行什么操作的时候才同步索引服务器--> <str name="replicateAfter">commit</str> & 阅读全文
posted @ 2013-04-23 16:11 Dream-Weaver 阅读(337) 评论(0) 推荐(0) 编辑
摘要: 索引同步数据库的方式也有几种方案: 1.用quarz.jar做定时任务,进行索引库与数据库的同步。 (即每隔一段时间向solr服务器发送同步命令, 可以是 http://localhost:12002/solr/db/dataimport?command=full-import 也可以是 http://localhost:12002/solr/db/dataimport?command=delta-import 进行索引同步。 ) 2.当用solrj进行手动建索引时,也是向solr服务器发送同步请求。这只需要调用你自己写的那个.acion或... 阅读全文
posted @ 2013-04-23 16:10 Dream-Weaver 阅读(724) 评论(0) 推荐(0) 编辑
摘要: 对于拼音和拼音首字母的支持,当你在搜商品的时候,如果想输入拼音和拼音首字母就给出商品的信息,怎么办呢?实现方式有2种,但是他们其实是对应的。 1.用lucene实现。 1.建索引, 多建一个索引字段,即拼音和拼音首字母这2个字段。合并的一个字段。 (拼音和拼音首字母,可以通过pinyin4j.jar。将想要进行拼音搜索的字段进行拼音转换。) 2.对输入的参数判断是否是拼音,(可以通过将传人的值转换为 utf-8 形式,如果转换后的字符串长度大于原来的字符串的长度,那么就不是拼音。否则就进行拼音查询) 3.对拼音索引那个字段进行查询,和中文查询一样。参考中文查询。 2.solr实现。 1.so. 阅读全文
posted @ 2013-04-23 16:09 Dream-Weaver 阅读(577) 评论(0) 推荐(0) 编辑
摘要: 这个功能的实现有几种不同的思路。大概半个月前,我在网上查了相关内容,心里很凉。google里面从2009年到2011年都有人问这个问题。但是没有一个人回答。当网上都没人回答的时候就是尴尬的时候。后来吧,还好,总监是做搜索出身的。不懂就问呗。提出的方案大概有3套: 1。新建张表,然后这张表专门用来存放与相关搜索的字段。将表的数据导入到缓存中,每次从缓存中查询。即不消耗数据库连接,也很快(最简单的方法,对应小型网站没问题,除了需要维护随时插入数据之外,就是数据不全这个缺点) 2。对用户输入的信息进行验证,如果数据库有就不存,并且提示,如果没有就存入数据库。并对这个表的数据建缓存。 3。研究solr 阅读全文
posted @ 2013-04-23 16:08 Dream-Weaver 阅读(801) 评论(0) 推荐(0) 编辑
摘要: 查询索引的方法有2种: 一.通过solr搜索引擎自己已经实现的功能来查询。即发送url请求到solr服务器。solr会通过这个url请求,返回相应的响应。 solr有个管理界面,url:http://localhost:12002/solr/ 在有数据的情况下,可以在这里做各种查询,在这里查询的时候,就会向solr服务器发送各种请求。默认为 * :*即查询所有索引 一般向solr服务器发送请求的url: http://localhost:12002/solr/db/select/?q=searchIndex%3A*&version=2.2&start=0&rows=10 阅读全文
posted @ 2013-04-23 16:07 Dream-Weaver 阅读(643) 评论(0) 推荐(0) 编辑
摘要: solr建索引包括增量建索引和全量建索引。<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">这个请求是用来处理用户提交的数据库导入的handler。只需要用法访问:http://localhost:12002/solr/db/dataimport?command=full-import。即可更新索引,这里我用的是全量建索引。也可以使用增量建索引,即数据库中改变了什么就建什么的索引。理论上说增量建索引的效 阅读全文
posted @ 2013-04-23 16:06 Dream-Weaver 阅读(205) 评论(0) 推荐(0) 编辑
摘要: 本节详细讲解solrconfig.xml1.如果配置文件配置错误,是否提示。true要报错,false不报错。<abortOnConfigurationError>${solr.abortOnConfigurationError:true}</abortOnConfigurationError>2.solr版本。<luceneMatchVersion>LUCENE_31</luceneMatchVersion>3. 索引文件目录,建索引的目录和查询的目录都是它。<dataDir>${solr.data.dir:./solr/db/da 阅读全文
posted @ 2013-04-23 16:05 Dream-Weaver 阅读(297) 评论(0) 推荐(0) 编辑
摘要: solr3.1版本,solr3.x版本大部分应该一致。 一个一个的配置项来谈谈schema.xml 配置:以下是针对schema.xml 配置文件的剖析: 1. <types></types>这个标签和它的意义一样,是用来表示数据有哪些类型,这些类型当然是solr内部定义的类型和自定义类型。 2. <!-- The StrField type is not analyzed, but indexed/stored verbatim. --> 和他上面解释一样,string类型是不分词的,要建索引,要存储 <fieldType name="st 阅读全文
posted @ 2013-04-23 16:03 Dream-Weaver 阅读(191) 评论(0) 推荐(0) 编辑
摘要: solr版本solr 3.1 solr有几个配置文件是最重要的。solr.xml,solrconfig.xml,schema.xml,db-data-config.xml 如果你不使用solr自带的更新索引的功能,想用solrj编程来实现索引更新,那么我可以告诉你db-data-config.xml文件没什么用,一个一个来介绍下这几个配置文件吧。 看了网上很多大神的blog,然后自己开发经验之后发现这些配置文件都是蛮好理解的。 1. solr.xml配置例子:<?xml version="1.0" encoding="UTF-8" standalo 阅读全文
posted @ 2013-04-23 16:02 Dream-Weaver 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 1》 首先下载好solr,我用的是 solr3.1,下载地址: windows版本http://labs.xiaonei.com/apache-mirror/lucene/solr/3.1.0/apache-solr-3.1.0.ziplinux版本http://labs.xiaonei.com/apache-mirror/lucene/solr/3.1.0/apache-solr-3.1.0.tgz2》准备运行容器,我用的是tomcat6.0.20.如果是玩的话,也可以不用准备专门的容易,你只需解压好solr的下载包,找到example文件夹,然后运行 start.jar。具体指令:java 阅读全文
posted @ 2013-04-23 16:00 Dream-Weaver 阅读(126) 评论(0) 推荐(0) 编辑
摘要: 如果看了第七节,那么可以告诉你,lucene对分组的支持的确不是很好,如果想对多个字段分组,问题就大了,必须每次自己将多个字段合并为一个字段,用 “,”或者空格分隔。这样得到的结构将会比较固定,假如有一天,我们要用3个字段来分组呢?那么代码就得重新写,这就不好了。如果每次变动都要改代码那么 这个方案就有待商榷。 现在好了,前面的其实都是铺垫,咱们要用的将会是solr。还记得当时自己用lucene实现了网站搜索的基本功能之后,总监给我说的这句话的时候。我直接抽过去了。。 solr是什么呢?solr是基于lucene的一个搜索引擎。对应索引的facet,分布式集群等都有比较好的支持。 S... 阅读全文
posted @ 2013-04-23 15:58 Dream-Weaver 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 假如你像用lucene来作分组,比如按类别分组,这种功能,好了你压力大了,lucene本身是不支持分组的。当你想要这个功能的时候,就可能会用到基于lucene的搜索引擎solr。不过也可以通过编码通过FieldCache和单字段,对索引进行分组,比如:想构造类别树。大类里面还有小类那种。这个功能实现起来可能会比较麻烦,主要是lucene提供的支持也不多,参考资料也不多。(以下代码都是我在做测试的时候做的,可以稍作修改满足相应需求。)//用于分组统计的对象GroupCollector import java.io.IOException;import org.apache.lucene.inde 阅读全文
posted @ 2013-04-23 15:57 Dream-Weaver 阅读(360) 评论(0) 推荐(0) 编辑
摘要: 下面是中文分词搜索的代码: (测试代码,稍作改动可以正式使用。以下代码都是在lucene3.x中,最新版本3.4可能有改动。不过思路不变) public void searchIKIndexByString(String index){ //存放索引目录 File indexDir = new File("D:\\luceneIndex"); FSDirectory directory; try { //用索引目录构建directory对象 directory = FSDirectory.open(indexDir); //构造索引搜索器 IndexSearcher se. 阅读全文
posted @ 2013-04-23 15:54 Dream-Weaver 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 以下是通过lucene自带的 TermQuery来查询,即使用lucene自带的默认分词器,英文分词器进行分词。 在以后的文章中会将到中文分词等相关内容。(以下代码用在项目中会由io问题,最好再改进一下,这里只用了测试。考虑到公司代码安全问题,这里只给出开发中的部分测试代码。)public ArrayList<String> queryByString(String queryStr){ //上面文章中建立索引的文件目录 File indexDir = new File("D:\\luceneIndex"); FSDirectory directory; Arr 阅读全文
posted @ 2013-04-23 15:53 Dream-Weaver 阅读(145) 评论(0) 推荐(0) 编辑
摘要: Lucene将输入数据以一种倒排索引的数据结构进行存储,其原因是倒排索引并不是回答“这个文档中包含哪些单词?”,而是经过优化后快速回答“哪些文档包含这些单词X”,导致最终速度不只是提升一点点。1 protected String[] ids = {"1", "2"};2 protected String[] unindexed = {"Netherlands", "Italy"};3 protected String[] unstored = {"Amsterdam has lots of bridges 阅读全文
posted @ 2013-04-23 15:51 Dream-Weaver 阅读(287) 评论(0) 推荐(0) 编辑
摘要: lucene的优缺点:(1)索引文件格式独立于应用平台。Lucene定义了一套以8位字节为基础的索引文件格式,使得兼容系统或者不同平台的应用能够共享建立的索引文件。 (2)在传统全文检索引擎的倒排索引的基础上,实现了分块索引,能够针对新的文件建立小文件索引,提升索引速度。然后通过与原有索引的合并,达到优化的目的。 (3)优秀的面向对象的系统架构,使得对于Lucene扩展的学习难度降低,方便扩充新功能。 (4)设计了独立于语言和文件格式的文本分析接口,索引器通过接受Token流完成索引文件的创立,用户扩展新的语言和文件格式,只需要实现文本分析的接口。 (5)已经默认实现了一套... 阅读全文
posted @ 2013-04-23 15:50 Dream-Weaver 阅读(718) 评论(0) 推荐(0) 编辑
摘要: lucene本身不支持中文分词,毕竟嘛,这是人家外国人写的开源框架,当然不太会考虑其他国家的使用,不过它支持对中文分词的 扩展。 下面是网上对几个中文分词器的评论: paoding :Lucene中文分词“庖丁解牛” Paoding Analysis imdict :imdict智能词典所采用的智能中文分词程序 mmseg4j : 用 Chih-Hao Tsai 的 MMSeg 算法 实现的中文分词器 IKAnalyzer :采用了特有的“正向迭代最细粒度切分算法“,多子处理器分析模式 http://linliangyi2007.iteye.com/blog/501228IKAnalyzer. 阅读全文
posted @ 2013-04-23 15:49 Dream-Weaver 阅读(231) 评论(0) 推荐(0) 编辑