Grails Mahout插件和后台作业(quartz2)
我是圣杯新手。我正在使用创建推荐引擎。我正在关注这一点。这对我来说很好 现在我想做的是,我只想用后台工作来做这个Mahout推荐。这样用户就可以根据自己喜欢的内容自动推荐。我将其用于后台工作。我怎样才能使用Mahout作为背景工作 在这里,您可以看到我创建了一个prefrencontroller.groovy,其中添加了userID、itemID和prefrence number My Prefrence.groovy域类文件-- 还有我的首席财务官Grails Mahout插件和后台作业(quartz2),grails,grails-plugin,grails-2.0,mahout,Grails,Grails Plugin,Grails 2.0,Mahout,我是圣杯新手。我正在使用创建推荐引擎。我正在关注这一点。这对我来说很好 现在我想做的是,我只想用后台工作来做这个Mahout推荐。这样用户就可以根据自己喜欢的内容自动推荐。我将其用于后台工作。我怎样才能使用Mahout作为背景工作 在这里,您可以看到我创建了一个prefrencontroller.groovy,其中添加了userID、itemID和prefrence number My Prefrence.groovy域类文件-- 还有我的首席财务官 package com.rbramley.m
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时,它将显示RecommendController。但我想把它作为背景工作推荐应自动向所有用户推荐,无需任何人工干预。如果我理解您的问题,您需要一个按需作业,您可以从控制器运行它。要执行此操作,请在不使用任何触发器的情况下创建作业,然后可以从控制器手动触发它,并将参数传递给它。这将在后台触发作业。在executedefine中,您还可以将所需的任何服务注入到该作业中 控制器:
BackgroundJob.triggerNow([id:params.id,userId:userId])
工作
谢谢你的回复。实际上,我正在使用Mahout推荐插件进行推荐。但我在我的工作目录中找不到那个控制器。我希望用户自动获得推荐(基于他们喜欢的内容)。例如,在亚马逊,书籍是根据你购买的东西或喜欢的东西来推荐的。你说
我只想用后台工作做这个Mahout推荐
你能详细介绍一下你想让这个工作为你做什么吗?现在我只能通过填写Mahout插件提供的推荐表来获得对特定用户的推荐。但通过手工填写UserID然后给出推荐是不好的。它应该在后台,这样用户就可以根据自己的喜好自动查看他们的建议。
BackgroundJob.triggerNow([id:params.id,userId:userId])
class BackgroundJob {
static triggers = {}
def execute(context) {
def id = context.mergedJobDataMap.get('id')
def userId = context.mergedJobDataMap.get('userId')
...
}
}