Поиск по запросу и местоположению в приложении 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
}
...
}