我是Grails新手。我正在使用Mahout Recommender Plugin來創建推薦引擎。我正在關注這個tutorial。這對我來說可以。Grails Mahout插件與後臺作業(quartz2)
現在我正在嘗試做什麼,我只是想做這個使用後臺作業的Mahout推薦。這樣用戶可以根據他們喜歡的內容自動推薦。我使用Quartz 2.x Scheduler作爲後臺工作目的。我如何使用Mahout作爲後臺作業?
在這個tutorial,你可以看到我已經創建了一個PrefrenceController.groovy,我在其中添加了userID,itemID和prefrence數字。
我Prefrence.groovy域類文件 -
package com.rbramley.mahout
import org.apache.commons.lang.builder.HashCodeBuilder
class Preference implements Serializable {
long userId
long itemId
float prefValue
static constraints = {
userId()
itemId()
prefValue range: 0.0f..5.0f
}
boolean equals(other) {
if(!(other instanceof Preference)) {
return false
}
other.userId == userId && other.itemId == itemId
}
int hashCode() {
def builder = new HashCodeBuilder()
builder.append userId
builder.append itemId
builder.toHashCode()
}
static mapping = {
id composite: ['userId', 'itemId']
version false
}
}
和我PrefrenceController.groovy
package com.rbramley.mahout
import org.springframework.dao.DataIntegrityViolationException
class PreferenceController {
static allowedMethods = [save: "POST", update: "POST", delete: "POST"]
def index() {
redirect(action: "list", params: params)
}
def list(Integer max) {
params.max = Math.min(max ?: 10, 100)
[preferenceInstanceList: Preference.list(params), preferenceInstanceTotal: Preference.count()]
}
def create() {
[preferenceInstance: new Preference(params)]
}
def save() {
def preferenceInstance = new Preference(params)
if (!preferenceInstance.save(flush: true)) {
render(view: "create", model: [preferenceInstance: preferenceInstance])
return
}
flash.message = message(code: 'default.created.message', args: [message(code: 'preference.label', default: 'Preference'), preferenceInstance.id])
redirect(action: "show", id: preferenceInstance.id)
}
def show(Long id) {
def preferenceInstance = Preference.get(id)
if (!preferenceInstance) {
flash.message = message(code: 'default.not.found.message', args: [message(code: 'preference.label', default: 'Preference'), id])
redirect(action: "list")
return
}
[preferenceInstance: preferenceInstance]
}
def edit(Long id) {
def preferenceInstance = Preference.get(id)
if (!preferenceInstance) {
flash.message = message(code: 'default.not.found.message', args: [message(code: 'preference.label', default: 'Preference'), id])
redirect(action: "list")
return
}
[preferenceInstance: preferenceInstance]
}
def update(Long id, Long version) {
def preferenceInstance = Preference.get(id)
if (!preferenceInstance) {
flash.message = message(code: 'default.not.found.message', args: [message(code: 'preference.label', default: 'Preference'), id])
redirect(action: "list")
return
}
if (version != null) {
if (preferenceInstance.version > version) {
preferenceInstance.errors.rejectValue("version", "default.optimistic.locking.failure",
[message(code: 'preference.label', default: 'Preference')] as Object[],
"Another user has updated this Preference while you were editing")
render(view: "edit", model: [preferenceInstance: preferenceInstance])
return
}
}
preferenceInstance.properties = params
if (!preferenceInstance.save(flush: true)) {
render(view: "edit", model: [preferenceInstance: preferenceInstance])
return
}
flash.message = message(code: 'default.updated.message', args: [message(code: 'preference.label', default: 'Preference'), preferenceInstance.id])
redirect(action: "show", id: preferenceInstance.id)
}
def delete(Long id) {
def preferenceInstance = Preference.get(id)
if (!preferenceInstance) {
flash.message = message(code: 'default.not.found.message', args: [message(code: 'preference.label', default: 'Preference'), id])
redirect(action: "list")
return
}
try {
preferenceInstance.delete(flush: true)
flash.message = message(code: 'default.deleted.message', args: [message(code: 'preference.label', default: 'Preference'), id])
redirect(action: "list")
}
catch (DataIntegrityViolationException e) {
flash.message = message(code: 'default.not.deleted.message', args: [message(code: 'preference.label', default: 'Preference'), id])
redirect(action: "show", id: id)
}
}
}
假設我有我的數據庫中手動添加一些數據。現在,當用戶點擊RecommendController並放置特定的用戶ID時,它將顯示建議。但我想把它作爲背景Job。 建議應自動向所有用戶建議,無需任何人爲干預。
你說'我只想做使用後臺JOB'你想爲你的工作待辦事項你能在此擴大這種亨利馬烏建議? – Alidad
現在我只能通過填寫Mahout Plugin提供的推薦表單向特定用戶推薦。但通過手動填充UserID然後給予建議並不好。它應該在後臺,以便用戶可以根據自己的喜好自動查看他們的建議。 –