Използвам Mahout, за да изградя базиран на артикули двигател за препоръки Cf. Създавам клас MahoutHelper, който има конструктор:
public MahoutHelper(String serverName, String user, String password,
String DatabaseName, String tableName) {
source = new MysqlConnectionPoolDataSource();
source.setServerName(serverName);
source.setUser(user);
source.setPassword(password);
source.setDatabaseName(DatabaseName);
source.setCachePreparedStatements(true);
source.setCachePrepStmts(true);
source.setCacheResultSetMetadata(true);
source.setAlwaysSendSetIsolation(true);
source.setElideSetAutoCommits(true);
DBmodel = new MySQLJDBCDataModel(source, tableName, "userId", "itemId",
"value", null);
similarity = new TanimotoCoefficientSimilarity(DBmodel);
}
и препоръчителният метод е:
public List<RecommendedItem> recommendation() throws TasteException {
Recommender recommender = null;
recommender = new GenericItemBasedRecommender(DBmodel, similarity);
List<RecommendedItem> recommendations = null;
recommendations = recommender.recommend(userId, maxNum);
System.out.println("query completed");
return recommendations;
}
Той използва източник на данни за изграждане на модел на данни, но проблемът е, че когато mysql има само няколко данни (по-малко от 100), програмата работи добре за мен, докато когато мащабът стане над 1 000 000, програмата се натрупва при извършване на препоръки и никога не продължава напред . Нямам идея как става. Между другото използвах същите данни, за да създам FileDataModel с .dat файл и отнема само 2~3 секунди за завършване на анализа. Объркан съм.