gpt4 book ai didi

java - Solrj 日期请求

转载 作者:行者123 更新时间:2023-12-02 05:25:52 27 4
gpt4 key购买 nike

如何使用 SolrJ 按日期请求?

我得到一个格式为'01/10/2014'的日期作为参数。然后我将此格式转换为 Date 对象,并将该对象转换为 UTC 格式。这是我正在做的事情的代码示例:

public class DateHelper {
public static final String DD_MM_YYYY_FORMAT = "dd/MM/yyyy";
public static final String SOLR_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'";

public static Date getDateFromString(String date, String format) {
if (StringUtils.isNotEmpty(date)) {
try {
return FastDateFormat.getInstance(format).parse(date);
} catch (ParseException e) {
LOGGER.error(e.getMessage());
}
}
return null;
}

public static String getStringFromDate(Date date, String format) {
if (date != null) {
try {
return FastDateFormat.getInstance(format).format(date);
} catch (Exception e) {
LOGGER.error(e.getMessage());
}
}
return "";
}

public static void main(String...args){
Date dateFromString = DateHelper.getDateFromString('01/10/2014', DateHelper.DD_MM_YYYY_FORMAT);
String date = DateHelper.getStringFromDate(dateFromString, DateHelper.SOLR_DATE_FORMAT);
System.out.println(date);
}
}

这个小程序显示“2014-10-01T00:00:00Z”。当我尝试使用过滤器查询在 Solr 中提交此日期时,我从 Sorl 收到此错误:

org.apache.solr.client.solrj.impl.HttpSolrServer$RemoteSolrException: Invalid Date String:'2014-10-01T00'

这是我的 Solr 查询:

SolrQuery solrQuery = new SolrQuery("*:*");
String date = String.format( "date:%s",dateInput);
query.addFilterQuery(date);

getSolrServer().query(solrQuery, METHOD.POST);

如何解决这个问题?感谢您的帮助。

P.S:FastDateFormat 类来自 Apache Commons Lang 3。我使用的是 solr 版本 4.8.1。

最佳答案

发生这种情况是因为 filterQuery 的创建方式:

String date = String.format( "date:%s",dateInput);
query.addFilterQuery(date);

这样 solr 就会得到:

date:2014-10-01T00:00:00Z

由于查询解析器无法正确解析多个 : 符号,因此引发异常。

<小时/>

为了修复它,Query Syntax 中的特殊字符应该转义。

从java端可以这样完成(使用SolrJ中的ClientUtils.escapeQueryChars):

String date = String.format( "date:%s", ClientUtils.escapeQueryChars(dateInput));
query.addFilterQuery(date);

关于java - Solrj 日期请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26037324/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com