#hibernate #spring-boot #search #lucene #hibernate-jpa
#впасть в спящий режим #пружинный ботинок #Поиск #люциен #спящий режим-jpa
Вопрос:
Я пытаюсь определить, попадает ли дата истечения срока действия между сегодняшним днем и другой указанной датой. Хотя в моей базе данных есть результаты, поисковый запрос, похоже, не извлекает значение. Пожалуйста, помогите!
Это выполняемый запрос: jpaQuery: FullTextQueryImpl( membershipStatus:full_member AccountManager.FirstName:nikki ExpiryDate:[20190416 — 20190516})
Кроме того, база данных имеет дату истечения срока действия в формате ГГГГ-ММ-дд ЧЧ: мм: сс, не уверен, как сопоставить поля.
Это запрос:
Query expiringInQuery = queryBuilder
.range()
.onField("expiryDate")
.ignoreFieldBridge()
.from(DateTools.dateToString(today, DateTools.Resolution.DAY))
.to(DateTools.dateToString(expiringDate, DateTools.Resolution.DAY))
.excludeLimit()
.createQuery();
Это относится к сущности:
@Field
@Column(name = "expiryDate")
@Temporal(TemporalType.TIMESTAMP)
@JsonIgnore
@IndexedEmbedded
@DateBridge(resolution=org.hibernate.search.annotations.Resolution.DAY, encoding = EncodingType.STRING)
private Date expiryDate;
Ответ №1:
Если вы сохранили их в поле даты, посмотрите здесь: https://lucene .apache.org/solr/guide/6_6/working-with-dates.html
Таким образом, правильный синтаксис будет примерно таким (вы могли бы не указывать время)
datefield:[2019-04-16T00:00:00.000Z TO 2019-05-16T23:59:59.999Z]
например, DateRangeField также допускает такие запросы, как
[2014 TO 2014-12-01]
проверьте ссылку.
Ответ №2:
Это то, что наконец сработало.
String expiringIn = (inputsMap.get("expiringIn").equals("None")) ? "*" :
(inputsMap.get("expiringIn"));
Date today = DateUtils.truncate(new Date(), Calendar.DATE);
Query luceneQuery = queryBuilder
.range()
.onField("expiryDate")
.from(today)
.to(expiringDate)
.createQuery();
На объекте,
@Field
@Column(name = "expiryDate")
@Temporal(TemporalType.TIMESTAMP)
@JsonIgnore
@IndexedEmbedded
@DateBridge(resolution = org.hibernate.search.annotations.Resolution.MILLISECOND,
encoding = EncodingType.STRING)
private Date expiryDate;