caio.co/de/cerberus

Ensure `findSimilar(long, int)` respects maxResults

The only way this can happen with a MoreLikeThis-based implementation
is if we somehow end up with several distinct recipes with exactly
the same content, so this test is more for my future self when trying
to make this faster.
Id
1dc28ea7cc8cf10056a548f6c7752227627a8c0d
Author
Caio
Commit time
2019-04-11T09:13:16+02:00

Modified src/main/java/co/caio/cerberus/search/SearcherImpl.java

@@ -107,7 +107,7
var builder = new SearchResult.Builder();

int totalHits = 0;
- for (int i = 0; i < result.scoreDocs.length; i++) {
+ for (int i = 0; i < result.scoreDocs.length && totalHits <= maxResults; i++) {
Document doc = indexSearcher.doc(result.scoreDocs[i].doc);
long foundRecipeId = doc.getField(RECIPE_ID).numericValue().longValue();

Modified src/test/java/co/caio/cerberus/search/SearcherTest.java

@@ -386,13 +386,13

@Test
void similarToRecipeIdNeverIncludesSelf() {
+ final int maxResults = 100;
Util.getSampleRecipes()
- .limit(10)
.forEach(
sampleRecipe -> {
- var similar = searcher.findSimilar(sampleRecipe.recipeId(), 100);
+ var similar = searcher.findSimilar(sampleRecipe.recipeId(), maxResults);

- assertTrue(similar.totalHits() > 0);
+ assertTrue(similar.totalHits() > 0 && similar.totalHits() <= maxResults);
assertEquals(-1, similar.recipeIds().indexOf(sampleRecipe.recipeId()));
});
}