@Nullable @Override public Entity lookup(long id) { if (idSet.contains(id)) { return Entities.create(entityType, id); } else { return null; } }
public TestUser build() { return new TestUser(Entities.create(CommonTypes.USER, userId), ImmutableList.copyOf(trainEvents), ImmutableList.copyOf(testEvents)); } }
@Override public Entity next() { return Entities.create(type, idIter.nextLong()); } }
/** * Derive bare entities from the values in another type of entity. This method only consults the entities added * so far, so it should be called *after* all other calls to {@link #addEntity(Entity)} and friends. If an entity * has already been added with the same type and ID as one of the derived entities, it is kept instead of the derived * entity. * * @param derived The derived entity type. * @param source The source entity type. * @param attr The source attribute. * @return The builder (for chaining). */ public EntityCollectionDAOBuilder deriveEntities(EntityType derived, EntityType source, TypedName<Long> attr) { EntityCollectionBuilder src = entitySets.get(source); if (src == null) { // no source entities, skip return this; } EntityCollectionBuilder ecb = entitySets.get(derived); if (ecb == null) { ecb = EntityCollection.newBareBuilder(derived); entitySets.put(derived, ecb); } for (Entity e: src.entities()) { if (e.hasAttribute(attr)) { long key = e.getLong(attr); ecb.add(Entities.create(derived, key), false); } } return this; }
@Test public void testNullQueryOneEntity() { EntityCollectionDAO dao = EntityCollectionDAO.create(Entities.create(CommonTypes.USER, 42)); EntityQuery<Entity> query = EntityQuery.newBuilder(CommonTypes.USER) .build(); List<Entity> results = ObjectStreams.makeList(dao.streamEntities(query)); assertThat(results, contains(Entities.create(CommonTypes.USER, 42))); }
@Test public void testAddEntity() { EntityCollection ec = EntityCollection.newBuilder(CommonTypes.USER) .add(Entities.create(CommonTypes.USER, 42)) .build(); assertThat(ec.size(), equalTo(1)); assertThat(ec.lookup(42), equalTo(Entities.create(CommonTypes.USER, 42))); assertThat(ec.lookup(70), nullValue()); assertThat(Lists.newArrayList(ec), contains(Entities.create(CommonTypes.USER, 42))); assertThat(ec.find(CommonAttributes.ENTITY_ID, 42L), contains(Entities.create(CommonTypes.USER, 42))); assertThat(ec.getType(), equalTo(CommonTypes.USER)); assertThat(ec.idSet(), contains(42L)); }
@Test public void testOneEntity() { EntityCollectionDAO dao = EntityCollectionDAO.create(Entities.create(CommonTypes.USER, 42)); assertThat(dao.getEntityIds(CommonTypes.ITEM), hasSize(0)); assertThat(dao.getEntityIds(CommonTypes.USER), contains(42L)); assertThat(ObjectStreams.makeList(dao.streamEntities(RATING)), hasSize(0)); assertThat(ObjectStreams.makeList(dao.streamEntities(CommonTypes.USER)), contains(Entities.create(CommonTypes.USER, 42L))); assertThat(dao.lookupEntity(CommonTypes.USER, 42), equalTo(Entities.create(CommonTypes.USER, 42))); }
@Test public void testAddEntity() { EntityCollection ec = EntityCollection.newBuilder(CommonTypes.USER, AttributeSet.create(CommonAttributes.ENTITY_ID)) .add(Entities.create(CommonTypes.USER, 42)) .build(); assertThat(ec.size(), equalTo(1)); assertThat(ec.lookup(42), equalTo(Entities.create(CommonTypes.USER, 42))); assertThat(ec.lookup(70), nullValue()); assertThat(Lists.newArrayList(ec), contains(Entities.create(CommonTypes.USER, 42))); assertThat(ec.find(CommonAttributes.ENTITY_ID, 42L), contains(Entities.create(CommonTypes.USER, 42))); assertThat(ec.getType(), equalTo(CommonTypes.USER)); assertThat(ec.idSet(), contains(42L)); }
@Test public void testBareEntity() { JSONEntityFormat fmt = new JSONEntityFormat(); fmt.setEntityType(CommonTypes.USER); assertThat(fmt.getAttributes(), nullValue()); LineEntityParser lep = fmt.makeParser(Collections.EMPTY_LIST); Entity res = lep.parse("{\"$id\": 203810}"); assertThat(res, notNullValue()); assertThat(res.getId(), equalTo(203810L)); assertThat(res.getType(), equalTo(CommonTypes.USER)); assertThat(res, equalTo(Entities.create(CommonTypes.USER, 203810))); }
@Test public void testFindSomeItems() { StaticDataSource source = new StaticDataSource(); source.addSource(ImmutableList.of(Entities.create(CommonTypes.ITEM, 3), Entities.create(CommonTypes.ITEM, 2), Entities.create(CommonTypes.ITEM, 7))); DataAccessObject dao = source.get(); ItemScorer scorer = PrecomputedItemScorer.newBuilder() .addScore(42, 2, 3.0) .addScore(42, 7, 1.0) .addScore(42, 3, 3.5) .build(); ItemRecommender rec = new TopNItemRecommender(dao, scorer); List<Long> recs = rec.recommend(42, 2, null, null); assertThat(recs, hasSize(2)); assertThat(recs, contains(3L, 2L)); ResultList details = rec.recommendWithDetails(42, 2, null, null); assertThat(details, hasSize(2)); assertThat(details.idList(), contains(3L, 2L)); } }
@Test public void testAttributeMatch() { EntityQuery<Entity> q = EntityQuery.newBuilder(CommonTypes.RATING) .addFilterField(CommonAttributes.USER_ID, 42L) .build(); assertThat(q.matches(Entities.create(CommonTypes.RATING, 42L)), equalTo(false)); assertThat(q.matches(Entities.create(CommonTypes.USER, 42L)), equalTo(false)); assertThat(q.matches(Entities.newBuilder(CommonTypes.RATING, 42L) .setAttribute(CommonAttributes.USER_ID, 42L) .build()), equalTo(true)); assertThat(q.matches(Entities.newBuilder(CommonTypes.RATING, 42L) .setAttribute(CommonAttributes.USER_ID, 78L) .build()), equalTo(false)); } }
@Test public void testGetScoreOnly() { StaticDataSource source = new StaticDataSource(); source.addSource(ImmutableList.of(Entities.create(CommonTypes.ITEM, 3))); DataAccessObject dao = source.get(); ItemScorer scorer = PrecomputedItemScorer.newBuilder() .addScore(42, 3, 3.5) .build(); ItemRecommender rec = new TopNItemRecommender(dao, scorer); List<Long> recs = rec.recommend(42); assertThat(recs, contains(3L)); ResultList details = rec.recommendWithDetails(42, -1, null, null); assertThat(details, hasSize(1)); assertThat(Results.basicCopy(details.get(0)), equalTo(Results.create(3, 3.5))); }
@Test public void testExcludeScore() { StaticDataSource source = new StaticDataSource(); source.addSource(ImmutableList.of(Entities.create(CommonTypes.ITEM, 3))); DataAccessObject dao = source.get(); ItemScorer scorer = PrecomputedItemScorer.newBuilder() .addScore(42, 3, 3.5) .build(); ItemRecommender rec = new TopNItemRecommender(dao, scorer); List<Long> recs = rec.recommend(42, -1, null, LongSets.singleton(3L)); assertThat(recs, hasSize(0)); ResultList details = rec.recommendWithDetails(42, -1, null, LongSets.singleton(3L)); assertThat(details, hasSize(0)); }
@Override public Entity next() { return Entities.create(type, idIter.nextLong()); } }
@Nullable @Override public Entity lookup(long id) { if (idSet.contains(id)) { return Entities.create(entityType, id); } else { return null; } }
/** * Derive bare entities from the values in another type of entity. This method only consults the entities added * so far, so it should be called *after* all other calls to {@link #addEntity(Entity)} and friends. If an entity * has already been added with the same type and ID as one of the derived entities, it is kept instead of the derived * entity. * * @param derived The derived entity type. * @param source The source entity type. * @param attr The source attribute. * @return The builder (for chaining). */ public EntityCollectionDAOBuilder deriveEntities(EntityType derived, EntityType source, TypedName<Long> attr) { EntityCollectionBuilder src = entitySets.get(source); if (src == null) { // no source entities, skip return this; } EntityCollectionBuilder ecb = entitySets.get(derived); if (ecb == null) { ecb = EntityCollection.newBareBuilder(derived); entitySets.put(derived, ecb); } for (Entity e: src.entities()) { if (e.hasAttribute(attr)) { long key = e.getLong(attr); ecb.add(Entities.create(derived, key), false); } } return this; }