Поиск по запросу и местоположению в приложении Grails

Я использую плагин для поиска в приложении Grails для поиска экземпляров "Предложение" следующим образом.

Настройка поиска с последующим отображением в классе предложений

class Offering {

    static searchable = {
        only: ['title', 'description']
    }

    String title
    String description

    Category category
    Location location

    BigDecimal price
    PricePeriod pricePeriod

    static belongsTo = [user: SecUser]

    static constraints = {
        title(blank: false, maxSize: 100)
        description(blank: false, maxSize: 10240)
        category(nullable: false)
        location(nullable: false)
        price(nullable: true, scale: 2)
        pricePeriod(nullable: true)
    }

    public String toString() {
        return title
    }

}

Позвоните в службу поиска

 def search = {
    must(queryString(params.query))
 }

 def searchResult = searchableService.search(search, params)

Как и ожидалось, это возвращает соответствующие попадания из сопоставленных свойств экземпляров Предложения. Коллекция предложений

Теперь я хотел бы выполнить поиск не только по поисковому запросу, но также и по дочернему элементу местоположения Offerings. В частности, поле "locationName" в дочернем экземпляре Location.

Поэтому, если я буду искать по запросу "ужин" и местоположение "Брисбен", я хотел бы получить коллекцию предложений, соответствующих "ужин", с дочерним экземпляром местоположения, свойство "locationName", соответствующее "Брисбен"

Любые идеи о том, где начать реализовывать что-то подобное с помощью плагина с возможностью поиска?

Класс местоположения

class Location {

    String locationName
    Location locationParent
    String postcode

    static hasMany = [locations: Location]

    static constraints = {
        locationName(blank: false, unique: true)
        locationParent(nullable: true)
        postcode(nullable: true)
    }

    public String toString() {
        return locationName
    }
}

Спасибо за вашу помощь

1 ответ

Я думаю, что вы хотите сделать что-то вроде:

class Offering {

   ...

   static searchable = {
       only: ['title', 'description']
       location component: true
   }

   ...
}

а также

class Location {

    ...

    static searchable = {
       only: ['locationName']
       location component: true
    }

    ...
}
Другие вопросы по тегам