Примененные фасеты по запросу не возвращают никакого результата - PullRequest
0 голосов
/ 18 марта 2020

Я пытаюсь классифицировать данные, доступные с использованием аспектов поиска 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 здесь, может кто-нибудь, пожалуйста, дайте мне знать, чего здесь не хватает?

1 Ответ

1 голос
/ 18 марта 2020

Полагаю, вы добавили аннотацию @Facet после того, как вы уже создали индексы Elasticsearch. Если это так, вы позаботились о:

  • Отбрасывании индексов и перезапуске Hibernate Search для обновления схемы?
  • Повторная индексация ваших данных с помощью массового индексатора ?

Невыполнение вышеперечисленного может привести к ошибкам поиска или неполным результатам поиска.

...