1

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()));

どんなヒントでも大歓迎です。

4

1 に答える 1

3

最も簡単なのはおそらく使用することです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に当てはまるため、カスタム型を作成し、そのためのコンバーターを登録することをお勧めします。

于 2014-01-27T07:00:19.430 に答える