java - 如何使用 spring data solr 向下舍入日期过滤器查询?

标签 java spring solr solrj spring-data-solr

如何使用 spring data solr 向下舍入日期过滤器查询?

我想使用 编写查询 fq=startDate:[2013-06-14T23:59:59.999Z/DAY TO 2013-06-14T23:59:59.999Z/DAY] FilterQuery.

如何使用 FilterQuery 舍入以下查询?

FilterQuery filterQuery = new SimpleFilterQuery();
filterQuery.addCriteria(new Criteria(EventDocument.FIELD_START_DATE).between(sc.getStartDate(), sc.getStartDate()));

任何提示将不胜感激。

最佳答案

最简单的可能是使用SimpleStringCriteria

String start = JavaDateConverter.INSTANCE.convert(sc.getStartDate())+"/DAY";
String end = JavaDateConverter.INSTANCE.convert(sc.getEndDate())+"/DAY";
Criteria criteria = new SimpleStringCriteria("[" + start + " TO " + end + "]");

注册自定义转换器有点复杂

@Configuration
@EnableSolrRepositories
public class SolrContext {

  //..skipped solr server initialization to shorten

  @Bean
  public SolrTemplate solrTemplate() throws Exception {
    SolrTemplate solrTemplate = new SolrTemplate(solrServerFactory());
    solrTemplate.setSolrCore("collection1"); 
    solrTemplate.registerQueryParser(SimpleQuery.class, queryParser());
    return solrTemplate;
  }

  @Bean  
  public QueryParser queryParser() {
    DefaultQueryParser queryParser = new DefaultQueryParser();

    //register custom converter for Date
    queryParser.registerConverter(RoundDayConverter.INSTANCE);
    return queryParser;
  }

  private enum RoundDayConverter implements Converter<Date, String> {
    INSTANCE;

    private static final DateTimeFormatter FORMATTER = ISODateTimeFormat.dateTime().withZoneUTC();

    @Override
    public String convert(Date source) {
      if (source == null) {
        return "";
      }

      return ClientUtils.escapeQueryChars(FORMATTER.print(source.getTime())) + "/DAY";
    }
  }
}

由于上述内容适用于每个Date,因此创建自定义类型并为其注册转换器可能是个好主意。

关于java - 如何使用 spring data solr 向下舍入日期过滤器查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21345304/

相关文章:

java - Spring MVC没有找到默认构造函数?

linux - 在 TomCat 6.x 上启动 Apache Solr 4.x 时出错 : java.net.UnknownHostException: hostname: hostname: Name or service not known

java - Spring @Transactional 注解类或方法

Spring i18n : problem with multiple property files

tomcat - 是否需要使用 servlet(Tomcat、Jetty 等)安装 solr?

jquery - 带有 slider UI 的价格范围过滤器,在同一查询中包含来自 Solr 的最小值和最大值?

java - Java中如何对两个字段进行排序?

java - 如何在 Google App Engine 上创建 RESTful 客户端?

java - HashMap如何保证使用key的hashcode计算出的索引在可用范围内?

java - View 中的动画列表