Я пытаюсь классифицировать данные, доступные с использованием аспектов поиска Hibernate.
Запрос возвращает результаты правильно, но размер списка фасетов всегда равен 0. Вот моя модель -
Я классифицирую данные здесь на основе свойства cityStateCombination
, которое также получает форму, используя два отдельных свойства, доступных в индексе. .
@Entity
@Indexed
class Location {
@Id
@GeneratedValue
@Column(name = "id", updatable = false, nullable = false)
Long id
@Field
@NotNull
String city
@Field
@NotNull
String state
@Field
@NotNull
String stateCode
@Field
@NotNull
String zip
@Field
@NotNull
String country
@Field
@NotNull
String countryCode
@Field
String metro
@Field
Float latitude
@Field
Float longitude
transient String cityStateCombination
@Transient
@Field(index= org.hibernate.search.annotations.Index.YES, analyze= Analyze.NO, store= Store.YES, name="cityStateCombination")
@Facet(name="cityStateCombinationFacet", forField = "cityStateCombination")
String getCityStateCombination()
{
return (this.city + "," + this.state).toLowerCase()
}
Location() {
}
Location(String city, String state, String stateCode, String zip, String country, String countryCode, String metro,
Float latitude, Float longitude) {
this.city = city
this.state = state
this.stateCode = stateCode
this.zip = zip
this.country = country
this.countryCode = countryCode
this.metro = metro
this.latitude = latitude
this.longitude = longitude
}
}
Ниже приведен код для получения фасетов -
QueryBuilder locationQB = locationSearchService.getQueryBuilderForClass(Location)
Query luceneQuery = locationQB.phrase().onField("city").andField("state").andField("stateCode").
andField("zip").sentence(locationToSearch).createQuery()
//here I am receiving results correctly
List < Location > results = locationSearchService.fuzzySearchQb(luceneQuery, 10)
FullTextQuery fullTextQuery = locationSearchService.fullTextEntityManager.createFullTextQuery(luceneQuery, Location.class)
FacetingRequest cityStateCombinationFacetingRequest = locationQB.facet()
.name("cityStateFacetRequest")
.onField("cityStateCombinationFacet")
.discrete()
.orderedBy(FacetSortOrder.COUNT_DESC)
.includeZeroCounts(false)
.maxFacetCount(3)
.createFacetingRequest()
FacetManager facetManager = fullTextQuery.getFacetManager()
facetManager.enableFaceting(cityStateCombinationFacetingRequest)
List < org.hibernate.search.query.facet.Facet > facetsPulled = facetManager.getFacets("cityStateFacetRequest")
//Here, facets size returned is always 0
log.info 'facets pulled are :' + facetsPulled.size()
Пример индексированного документа выглядит так -
{
"_index" : "location",
"_type" : "Location",
"_id" : "56977",
"_score" : 1.0,
"_source" : {
"id" : "56977",
"cityStateCombination" : "millwood,virginia",
"city" : "Millwood",
"state" : "Virginia",
"stateCode" : "VA",
"zip" : "22646",
"country" : "United States",
"countryCode" : "US",
"metro" : "metro_name",
"latitude" : 39.0697,
"longitude" : -78.0375
}
Я использую groovy здесь, может кто-нибудь, пожалуйста, дайте мне знать, чего здесь не хватает?