Solr4.2-矫情的shards, facet

使用Solr的分布式多核查询时,Solr提供了shards方便大家使用,只需要设定 SolrQuery.set(“shards”,shardsStr)   即可,但是实际操作中遇到很多问题,首先是shards参数的格式问题,shards参数一定要是以下形式,否则异常报错: String shardsStr = 127.0.0.1:8080/solr/core1,127.0.0.1:8080/solr/core2,127.0.0.1:8080/solr/core3;     shards的好处是很方便的根据需求,在分布式的多服务器多核中进行查询任务,只需配置不同的ip,不同的core即可。facet是Solr另一个很方便的功能,可以根据字段进行统计并进行排序,做多核分布查询时,如果能把shards和facet并用可以免去很多人工后期分布合并并排序的麻烦,因为对于上亿的海量数据来说,进行合并统计并排序无疑是个费时费力的事,如果Solr有良好的数据结构支持这项工作的话就perfect啦。但是使用的过程中遇到了问题,单核测试OK,但是shards多核测试异常: <response>   <lst name=“responseHeader”>   <int name=“status”>500</int>   <int name=“QTime”>7320</int>   <lst name=“params”>   <str name=“facet.missing”>false</str>   <str name=“facet”>true</str>   <str name=“shards”>   127.0.0.1:8080/solr/core1,127.0.0.1:8080/solr/core2,127.0.0.1:8080/solr/core3    </str>   <str name=“facet.mincount”>1</str>   <str name=“start”>0</str>   <str name=“facet.sort”>count</str>   <str name=“q”>*:*</str>   <str name=“facet.limit”>1000</str>   <str name=“facet.field”>groupSend</str>   <str name=“rows”>100000</str>   </lst>   </lst>   <lst name=“error”>   <str name=“msg”>   java.lang.RuntimeException: Invalid version (expected 2, but 60) or the data in not in ’javabin’    format    </str>   <str name=“trace”>   org.apache.solr.common.SolrException: java.lang.RuntimeException: Invalid version (expected 2,    but 60) or the data in not in ’javabin’ format at    org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:302) at    org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:135) at  … 继续阅读

Java Date, Calendar小结

看到一串数字来表示日期1347883680来表示日期,像。。。电话号码。。。而实际是用秒来记录时间,那么从何时记起呢?–1970年1月1日。。。。。 下面转载一份博客记录Java日期使用小结:[原文:http://robinjie.iteye.com/blog/54386] Java 语言的Calendar,GregorianCalendar (日历),Date(日期), 和DateFormat(日期格式)组成了Java标准的一个基本但是非常重要的部分. 日期是商业逻辑计算一个关键的部分. 所有的开发者都应该能够计算未来的日期, 定制日期的显示格式, 并将文本数据解析成日期对象。学习日期, 日期格式, 日期的解析和日期的计算。 我们将讨论下面的类: 1、 具体类(和抽象类相对)java.util.Date 2、 抽象类java.text.DateFormat 和它的一个具体子类,java.text.SimpleDateFormat 3、 抽象类java.util.Calendar 和它的一个具体子类,java.util.GregorianCalendar 具体类可以被实例化, 但是抽象类却不能. 你首先必须实现抽象类的一个具体子类. 1. java.util.Date及其格式化 Date 类从Java 开发包(JDK) 1.0 就开始进化, 当时它只包含了几个取得或者设置一个日期数据的各个部分的方法, 比如说月, 日, 和年. 这些方法现在遭到了批评并且已经被转移到了Calendar类里去了, 我们将在本文中进一步讨论它. 这种改进旨在更好的处理日期数据的国际化格式. 就象在JDK 1.1中一样, … 继续阅读

Apache Log4j使用实例

转一篇log4j的使用说明,原文出自: ——————————————————– 1.Logger类 通过Logger类的静态方法Logger.getRootLogger得到RootLogger。所有其他的loggers是通过静态方法Logger.getLogger来实例化并获取的。这个方法Logger.getLogger把所想要的logger的名字作为参数。 Logger类的一些其它基本方法在下面列出: package org.apache.log4j;    public class Logger {      // Creation and retrieval methods:      public static Logger getRootLogger();      public static Logger getLogger(String name);           // printing methods:      public void debug(Object message);      public void info(Object message);      public void warn(Object message);      public void error(Object message);      public void fatal(Object message);         // generic printing method:      public void log(Level l, Object message);    }   2. getLogger方法 以一样的参数名字调用getLogger方法,返回的reference总是指向完全相同的logger对象。例如,在这里: Logger x = Logger.getLogger(“wombat”); Logger y = … 继续阅读

java.util.Properties类–jar包外的配置文件读取

运行java程序的时候常打成jar包扔到服务器上运行,但是一些IP,和路径等配置需要动态修改,为了把这写配置与jar包隔离开,可以使用Properties类读取外部配置,下面转载一篇文章介绍Properties的使用: 下文出自:http://gimgen1026.iteye.com/blog/152023 ——————————————————————————————————— Properties 类已不是新东西了,它在 Java 编程的早期就有了,并且几乎没有什么变化。J2SE 的 Tiger 版本增强了这个类,不仅可以用它在单独一行中指定用等号分隔的多个键-值对,还可以用XML 文件装载和保存这些键-值对。在 驯服 Tiger的这一期文章中,John Zukowski 展示了如何驾驭这匹新一代的“役马”。 J2SE 1.5 以前的版本要求直接使用 XML 解析器来装载配置文件并存储设置。虽然这并非是一件困难的事情,并且解析器是平台的标准部分,但是额外的工作总是有点让人烦。最近更新的 java.util.Properties 类现在提供了一种为程序装载和存储设置的更容易的方法: loadFromXML(InputStream is) 和 storeToXML(OutputStream os, String comment) 方法。 Properties 基本知识 如果不熟悉 java.util.Properties 类,那么现在告诉您它是用来在一个文件中存储键-值对的,其中键和值是用等号分隔的,如清单 1 所示。 清单 1. 一组属性示例 … 继续阅读

浅析 Java Thread.join()

一、在研究join的用法之前,先明确两件事情。 1.join方法定义在Thread类中,则调用者必须是一个线程, 例如: Thread t = new CustomThread();//这里一般是自定义的线程类 t.start();//线程起动 t.join();//此处会抛出InterruptedException异常 2.上面的两行代码也是在一个线程里面执行的。 以上出现了两个线程,一个是我们自定义的线程类,我们实现了run方法,做一些我们需要的工作;另外一个线程,生成我们自定义线程类的对象,然后执行 customThread.start(); customThread.join(); 在这种情况下,两个线程的关系是一个线程由另外一个线程生成并起动,所以我们暂且认为第一个线程叫做“子线程”,另外一个线程叫做“主线程”。 二、为什么要用join()方法 主线程生成并起动了子线程,而子线程里要进行大量的耗时的运算(这里可以借鉴下线程的作用),当主线程处理完其他的事务后,需要用到子线程的处理结果,这个时候就要用到join();方法了。 三、join方法的作用 在网上看到有人说“将两个线程合并”。这样解释我觉得理解起来还更麻烦。不如就借鉴下API里的说法: “等待该线程终止。” 解释一下,是主线程(我在“一”里已经命名过了)等待子线程的终止。也就是在子线程调用了join()方法后面的代码,只有等到子线程结束了才能执行。(Waits for this thread to die.) 四、用实例来理解 写一个简单的例子来看一下join()的用法,一共三个类: 1.CustomThread 类 2. CustomThread1类 3. JoinTestDemo 类,main方法所在的类。 代码1: package wxhx.csdn2;       /**    *    … 继续阅读