【发布时间】:2019-07-10 12:37:40
【问题描述】:
有:
- 线;
- 得分;
- 日期。
在线搜索,店铺进行如下:
@Override
public List<Delivery> searchNewDeliveriesBy(long storeId, String text, Long selectedDateAsMills) {
try (Session session = createSession()) {
Store store = session.get(Store.class, storeId);
FullTextEntityManager fullTextSession = Search.getFullTextSession(session);
QueryBuilder qb = fullTextSession.getSearchFactory()
.buildQueryBuilder()
.forEntity(Delivery.class)
.get();
org.apache.lucene.search.Query luceneQuery = qb.bool()
.must(
qb.keyword().onFields(DELIVERY_SEARCH_FIELDS).matching(text).createQuery()
)
.must(
qb.keyword().onField("store").matching(store).createQuery()
)
.createQuery();
//noinspection unchecked
return Search.getFullTextSession(session)
.createFullTextQuery(luceneQuery, Delivery.class)
.setSort(sortByFieldScore)
.list();
}
}
我的实体(没有太多):
public class Delivery {
...
private LocalDateTime deliveryDateMin;
private LocalDateTime deliveryDateMax;
...
}
我需要添加一个条件,使所选时间(方法变量selectedDateAsMills)介于deliveryDateMin 和deliveryDateMax 之间。
有LocalDateTimeBridge这样的类,但是网上没有使用的例子。这个答案(How to search between dates (Hibernate Search)?)不适合,因为有java.util.Date,而不是java.time.LocalDateTime。
更新
@Entity
@Table(name = "DELIVERY")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Cacheable
@Indexed
public class Delivery {
@Column(name = "delivery_date_min")
@JsonFormat(pattern = "yyyy-mm-dd HH:MM")
@Field
@FieldBridge(impl = LocalDateTimeBridge.class)
private LocalDateTime deliveryDateMin;
@Column(name = "delivery_date_max")
@JsonFormat(pattern = "yyyy-mm-dd HH:MM")
@Field
@FieldBridge(impl = LocalDateTimeBridge.class)
private LocalDateTime deliveryDateMax;
}
【问题讨论】:
标签: hibernate jpa java-8 lucene hibernate-search