Author: sslavic
Date: Sat Nov 30 17:29:50 2013
New Revision: 1546758

URL: http://svn.apache.org/r1546758
Log:
MAHOUT-1312: LocalitySensitiveHashSearch does not limit search results

Modified:
    mahout/trunk/CHANGELOG
    mahout/trunk/core/pom.xml
    
mahout/trunk/core/src/main/java/org/apache/mahout/math/neighborhood/LocalitySensitiveHashSearch.java
    
mahout/trunk/core/src/test/java/org/apache/mahout/math/neighborhood/SearchSanityTest.java
    mahout/trunk/pom.xml

Modified: mahout/trunk/CHANGELOG
URL: 
http://svn.apache.org/viewvc/mahout/trunk/CHANGELOG?rev=1546758&r1=1546757&r2=1546758&view=diff
==============================================================================
--- mahout/trunk/CHANGELOG (original)
+++ mahout/trunk/CHANGELOG Sat Nov 30 17:29:50 2013
@@ -2,6 +2,8 @@ Mahout Change Log
 
 Release 0.9 - unreleased
 
+  MAHOUT-1312: LocalitySensitiveHashSearch does not limit search results 
(sslavic)
+
   MAHOUT-1362: Remove examples/bin/build-reuters.sh (smarthi)
 
   MAHOUT-1361: Online algorithm for computing accurate Quantiles using 1-D 
clustering (tdunning)

Modified: mahout/trunk/core/pom.xml
URL: 
http://svn.apache.org/viewvc/mahout/trunk/core/pom.xml?rev=1546758&r1=1546757&r2=1546758&view=diff
==============================================================================
--- mahout/trunk/core/pom.xml (original)
+++ mahout/trunk/core/pom.xml Sat Nov 30 17:29:50 2013
@@ -178,6 +178,12 @@
     </dependency>
 
     <dependency>
+      <groupId>org.hamcrest</groupId>
+      <artifactId>hamcrest-all</artifactId>
+      <scope>test</scope>
+    </dependency>
+
+    <dependency>
       <groupId>org.easymock</groupId>
       <artifactId>easymock</artifactId>
       <scope>test</scope>

Modified: 
mahout/trunk/core/src/main/java/org/apache/mahout/math/neighborhood/LocalitySensitiveHashSearch.java
URL: 
http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/math/neighborhood/LocalitySensitiveHashSearch.java?rev=1546758&r1=1546757&r2=1546758&view=diff
==============================================================================
--- 
mahout/trunk/core/src/main/java/org/apache/mahout/math/neighborhood/LocalitySensitiveHashSearch.java
 (original)
+++ 
mahout/trunk/core/src/main/java/org/apache/mahout/math/neighborhood/LocalitySensitiveHashSearch.java
 Sat Nov 30 17:29:50 2013
@@ -188,12 +188,15 @@ public class LocalitySensitiveHashSearch
   @Override
   public List<WeightedThing<Vector>> search(Vector query, int limit) {
     PriorityQueue<WeightedThing<Vector>> top = searchInternal(query);
-    List<WeightedThing<Vector>> results = 
Lists.newArrayListWithExpectedSize(limit);
-    while (limit > 0 && top.size() != 0) {
+    List<WeightedThing<Vector>> results = 
Lists.newArrayListWithExpectedSize(top.size());
+    while (top.size() != 0) {
       WeightedThing<Vector> wv = top.pop();
       results.add(new WeightedThing<Vector>(((HashedVector) 
wv.getValue()).getVector(), wv.getWeight()));
     }
     Collections.reverse(results);
+    if (limit < results.size()) {
+      results = results.subList(0, limit);
+    }
     return results;
   }
 

Modified: 
mahout/trunk/core/src/test/java/org/apache/mahout/math/neighborhood/SearchSanityTest.java
URL: 
http://svn.apache.org/viewvc/mahout/trunk/core/src/test/java/org/apache/mahout/math/neighborhood/SearchSanityTest.java?rev=1546758&r1=1546757&r2=1546758&view=diff
==============================================================================
--- 
mahout/trunk/core/src/test/java/org/apache/mahout/math/neighborhood/SearchSanityTest.java
 (original)
+++ 
mahout/trunk/core/src/test/java/org/apache/mahout/math/neighborhood/SearchSanityTest.java
 Sat Nov 30 17:29:50 2013
@@ -17,6 +17,8 @@
 
 package org.apache.mahout.math.neighborhood;
 
+import static org.hamcrest.Matchers.*;
+
 import java.util.Arrays;
 import java.util.List;
 
@@ -208,6 +210,17 @@ public class SearchSanityTest extends Ma
   }
 
   @Test
+  public void testSearchLimiting() {
+    searcher.clear();
+    searcher.addAll(dataPoints);
+    for (Vector datapoint : dataPoints) {
+      List<WeightedThing<Vector>> firstTwo = searcher.search(datapoint, 2);
+
+      assertThat("Search limit isn't respected", firstTwo.size(), 
is(lessThanOrEqualTo(2)));
+    }
+  }
+
+  @Test
   public void testRemove() {
     searcher.clear();
     for (int i = 0; i < dataPoints.rowSize(); ++i) {

Modified: mahout/trunk/pom.xml
URL: 
http://svn.apache.org/viewvc/mahout/trunk/pom.xml?rev=1546758&r1=1546757&r2=1546758&view=diff
==============================================================================
--- mahout/trunk/pom.xml (original)
+++ mahout/trunk/pom.xml Sat Nov 30 17:29:50 2013
@@ -202,6 +202,12 @@
         <scope>test</scope>
       </dependency>
       <dependency>
+        <groupId>org.hamcrest</groupId>
+        <artifactId>hamcrest-all</artifactId>
+        <version>1.3</version>
+        <scope>test</scope>
+      </dependency>
+      <dependency>
         <groupId>org.easymock</groupId>
         <artifactId>easymock</artifactId>
         <version>3.2</version>


Reply via email to