使用solr的时候如果把date类型转换成tlong型数据,非常不方便,写入的时候要转换,返回的时候要转换,查询的时候要转换非常不方便,可以用tdate这个类型,使用这个有关注意事项是solr是用世界标准时间去格式化时间,所以在浏览器中你查询的出来的结果会和你传递的过去的时间不一样
solr中可以如下配置了 <field name="create_time" type="date" indexed="false" stored="true" required="true"/>
使用tdate的数据, solrj会自己转换他是把时间转换成标准时区的时间格式 如下代码
org.apache.solr.client.solrj.util.ClientUtils 中的方法writeXML中的107行
v = DateUtil.getThreadLocalDateFormat().format( (Date)v ); 调用他用org.apache.solr.common.util.DateUtil 格式化
org.apache.solr.common.util.DateUtil 初始化的SimpleDateFormat 使用的TimeZone 是utc 如下
public static TimeZone UTC = TimeZone.getTimeZone("UTC");
private static ThreadLocalDateFormat fmtThreadLocal = new ThreadLocalDateFormat();
private static class ThreadLocalDateFormat extends ThreadLocal<DateFormat> {
DateFormat proto;
public ThreadLocalDateFormat() {
super();
//2007-04-26T08:05:04Z
SimpleDateFormat tmp = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US);
tmp.setTimeZone(UTC);
proto = tmp;
}
@Override
protected DateFormat initialValue() {
return (DateFormat) proto.clone();
}
}
在查询的时候 q中如果有时间 也要以上的时间这样格式化代码,因为发过的url 中的q中的 时间类型要转化成xml date的格式
DateUtil.getThreadLocalDateFormat().format(date).replace(":", "\\:");
solr 中
DateField 转化代码如下
public Date parseMath(Date now, String val) {
String math = null;
final DateMathParser p = new DateMathParser(MATH_TZ, MATH_LOCALE);
if (null != now) p.setNow(now);
if (val.startsWith(NOW)) {
math = val.substring(NOW.length());
} else {
final int zz = val.indexOf(Z);
if (0 < zz) {
math = val.substring(zz+1);
try {
// p.setNow(toObject(val.substring(0,zz)));
p.setNow(parseDate(val.substring(0,zz+1)));
} catch (ParseException e) {
throw new SolrException( SolrException.ErrorCode.BAD_REQUEST,
"Invalid Date in Date Math String:'"
+val+'\'',e);
}
} else {
throw new SolrException( SolrException.ErrorCode.BAD_REQUEST,
"Invalid Date String:'" +val+'\'');
}
}
if (null == math || math.equals("")) {
return p.getNow();
}
try {
return p.parseMath(math);
} catch (ParseException e) {
throw new SolrException( SolrException.ErrorCode.BAD_REQUEST,
"Invalid Date Math String:'" +val+'\'',e);
}
}
分享到:
相关推荐
solr-solrj-4.9.0.jar
Solr-Solrj 5.0.0 是一个用于与Apache Solr进行交互的Java客户端库。在本文中,我们将深入探讨Solr-Solrj的使用、功能及其与自建Solr服务的集成,特别是涉及到中文分词的场景。 Apache Solr是一款流行的开源全文...
solr-solrj-4.4.0.jar
它支持JSON、XML和Binary Request格式,并且包含了一些优化,如批量操作和异步请求处理。此版本可能不包含某些新特性或对Solr服务器的最新API的支持,但它的稳定性和兼容性对于仍在使用Solr 4.x版本的系统来说是重要...
solr-solrj-6.6.0.jar
apache-solr-solrj-3.5.0.jar
描述中提到,Solr是一个企业级搜索应用服务器,它通过HTTP服务接口提供XML格式的数据交换。这表明Solr设计为分布式、可扩展的解决方案,适合处理大量数据的全文检索、拼写检查、高亮显示、 faceted search(分面搜索...
solrJ是Java连接solr进行查询检索和索引更新维护的jar包。
solr-solrj-4.10.3.jar。
solr的核心jar,大家可以一起好好学习一下,还是很优秀的
jar包,亲测可用
jar包,亲测可用
主要讲解了 solr客户端如何调用带账号密码的solr服务器调用,实现添加索引和查询索引,以及分组查询
下载后会获得名为:solr_core.4.6.0 的zip包,解压后会获得solr-core-4.6.0.jar和 solr-solrj-4.6.0.jar两个文件,搭建solr全文检索环境必须要添加的包
SolrJ 6.3.0 是一个针对 Apache Solr 的 Java 客户端库,它使得在 Java 应用程序中与 Solr 服务器进行交互变得更加便捷。Solr 是一个流行的开源搜索引擎,用于处理和索引大量文本数据,提供高效、可扩展的全文搜索...
solr详细配置教程与solrj的使用
solr5.5的jar包,solr4、solr5、solr6由于solr-core-x.jar的源码的调整,不能使用同一个jar包。solr4由于版本过老就暂时不做介绍,solr5所需jar包下载
标题 "org.apache.servicemix.bundles.solr-solrj-4.6.1_1.zip" 提供的信息表明,这是一个与Apache Solr相关的Java库,具体是SolrJ的版本4.6.1,由Apache ServiceMix组织打包。SolrJ是Apache Solr的Java客户端库,它...
jar包,亲测可用