简体   繁体   English

如何使用Spring Data Solr舍入日期过滤器查询?

[英]How to rounds down date filter query using spring data solr?

How can I rounds down date filter query using spring data solr? 如何使用Spring Data Solr舍入日期过滤器查询?

I want to write query fq=startDate:[2013-06-14T23:59:59.999Z/DAY TO 2013-06-14T23:59:59.999Z/DAY] using FilterQuery . 我想写查询fq=startDate:[2013-06-14T23:59:59.999Z/DAY TO 2013-06-14T23:59:59.999Z/DAY]使用FilterQuery

How can I rounds down following query using FilterQuery ? 如何使用FilterQuery以下查询?

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

Any Hint will be much appreciated. 任何提示将不胜感激。

The easiest would probably be to use SimpleStringCriteria 最简单的方法可能是使用SimpleStringCriteria

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

A bit more complex is registering a custom converter 注册自定义转换器要复杂一点

@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";
    }
  }
}

As the above would apply to every Date it might be a good idea to create a custom type and register a converter for that. 由于上述内容适用于每个Date因此创建一个自定义类型并为此注册一个转换器可能是一个好主意。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何使用spring data solr在solr中插入嵌套文档? - How to insert Nested document in solr using spring data solr? 如何使用spring-data-solr编写查询,该查询返回特定字段的所有值的列表 - How to write query using spring-data-solr which return list of all values of specific field 如何使用日期操作编写 Spring Data MongoDB 查询 - How to write a Spring Data MongoDB query using Date manipulation 如何在控制台或文件中记录弹簧数据生成的 solr 查询 - How to log spring data generated solr query on console or in a file 将Lucene / Solr与Spring数据结合使用 - Using Lucene/Solr with Spring Data Solr查询到Spring数据Solr查询表达式(否定) - Solr Query to Spring Data Solr Query Expression (Negation) 在Spring Data Solr 1.5.4中创建自定义Solr查询时出现AbstractMethodError - AbstractMethodError when creating custom Solr Query in Spring Data Solr 1.5.4 如何整合Spring数据Solr和Spring MVC - How to intergrate Spring data solr and Spring mvc 如何使用spring-data-solr构建FacetQuery,它返回solr索引中的所有文档(*:*) - How to build FacetQuery using spring-data-solr which returns all documents (*:*) from solr index 如何使用Solr索引和查询在索引时不可用的数据 - How to index and query data which is not available at index time using solr
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM