Repository: geode
Updated Branches:
  refs/heads/develop 56d964f86 -> 208f5ae58


GEODE-3206 : Corrected order of lucene search results based on score.
This closes #648


Project: http://git-wip-us.apache.org/repos/asf/geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/geode/commit/208f5ae5
Tree: http://git-wip-us.apache.org/repos/asf/geode/tree/208f5ae5
Diff: http://git-wip-us.apache.org/repos/asf/geode/diff/208f5ae5

Branch: refs/heads/develop
Commit: 208f5ae58c160212aecad82efddecb13f0eb86a6
Parents: 56d964f
Author: zhouxh <gz...@pivotal.io>
Authored: Fri Jul 21 16:20:14 2017 -0700
Committer: zhouxh <gz...@pivotal.io>
Committed: Fri Jul 21 16:20:14 2017 -0700

----------------------------------------------------------------------
 .../internal/cli/LuceneSearchResults.java       |  6 +-
 .../cli/LuceneIndexCommandsDUnitTest.java       | 72 ++++++++++++++------
 .../cli/LuceneIndexCommandsJUnitTest.java       | 49 ++++++-------
 3 files changed, 82 insertions(+), 45 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/geode/blob/208f5ae5/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/LuceneSearchResults.java
----------------------------------------------------------------------
diff --git 
a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/LuceneSearchResults.java
 
b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/LuceneSearchResults.java
index ba346fe..ff98b8f 100644
--- 
a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/LuceneSearchResults.java
+++ 
b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/LuceneSearchResults.java
@@ -55,7 +55,11 @@ public class LuceneSearchResults<K, V> implements 
Comparable<LuceneSearchResults
 
   @Override
   public int compareTo(final LuceneSearchResults searchResults) {
-    return Float.compare(getScore(), searchResults.getScore());
+    // Lucene search result is compared on score of result. Higher the score 
more relevant the
+    // result.
+    // This comparator is used to list results, order will be higher to lower 
on score. (Ref.
+    // GEODE-3206)
+    return Float.compare(getScore(), searchResults.getScore()) * -1;
   }
 
   public boolean getExeptionFlag() {

http://git-wip-us.apache.org/repos/asf/geode/blob/208f5ae5/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/cli/LuceneIndexCommandsDUnitTest.java
----------------------------------------------------------------------
diff --git 
a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/cli/LuceneIndexCommandsDUnitTest.java
 
b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/cli/LuceneIndexCommandsDUnitTest.java
index 009c74c..10409ca 100755
--- 
a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/cli/LuceneIndexCommandsDUnitTest.java
+++ 
b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/cli/LuceneIndexCommandsDUnitTest.java
@@ -21,6 +21,26 @@ import static 
org.apache.geode.test.dunit.Assert.assertEquals;
 import static org.apache.geode.test.dunit.Assert.assertFalse;
 import static org.apache.geode.test.dunit.Assert.assertTrue;
 
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.IntStream;
+
+import junitparams.JUnitParamsRunner;
+import junitparams.Parameters;
+import org.apache.lucene.analysis.Analyzer;
+import org.apache.lucene.analysis.core.KeywordAnalyzer;
+import org.apache.lucene.analysis.standard.StandardAnalyzer;
+import org.awaitility.Awaitility;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.runner.RunWith;
+
 import org.apache.geode.cache.Cache;
 import org.apache.geode.cache.Region;
 import org.apache.geode.cache.RegionShortcut;
@@ -41,24 +61,6 @@ import 
org.apache.geode.management.internal.cli.util.CommandStringBuilder;
 import org.apache.geode.test.dunit.Host;
 import org.apache.geode.test.dunit.VM;
 import org.apache.geode.test.junit.categories.DistributedTest;
-import org.apache.lucene.analysis.Analyzer;
-import org.apache.lucene.analysis.core.KeywordAnalyzer;
-import org.apache.lucene.analysis.standard.StandardAnalyzer;
-import org.awaitility.Awaitility;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-import org.junit.runner.RunWith;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
-import junitparams.JUnitParamsRunner;
-import junitparams.Parameters;
 
 @Category(DistributedTest.class)
 @RunWith(JUnitParamsRunner.class)
@@ -177,7 +179,6 @@ public class LuceneIndexCommandsDUnitTest extends 
CliCommandTestBase {
     analyzerNames.add(KeywordAnalyzer.class.getCanonicalName());
     analyzerNames.add(StandardAnalyzer.class.getCanonicalName());
 
-
     CommandStringBuilder csb = new 
CommandStringBuilder(LuceneCliStrings.LUCENE_CREATE_INDEX);
     csb.addOption(LuceneCliStrings.LUCENE__INDEX_NAME, INDEX_NAME);
     csb.addOption(LuceneCliStrings.LUCENE__REGION_PATH, REGION_NAME);
@@ -253,7 +254,6 @@ public class LuceneIndexCommandsDUnitTest extends 
CliCommandTestBase {
     analyzerNames.add(KeywordAnalyzer.class.getCanonicalName());
     analyzerNames.add(StandardAnalyzer.class.getCanonicalName());
 
-
     CommandStringBuilder csb = new 
CommandStringBuilder(LuceneCliStrings.LUCENE_CREATE_INDEX);
     csb.addOption(LuceneCliStrings.LUCENE__INDEX_NAME, INDEX_NAME);
     csb.addOption(LuceneCliStrings.LUCENE__REGION_PATH, REGION_NAME);
@@ -444,6 +444,38 @@ public class LuceneIndexCommandsDUnitTest extends 
CliCommandTestBase {
   }
 
   @Test
+  public void searchShouldReturnResultsInCorrectOrderOfScore() throws 
Exception {
+    final VM vm1 = Host.getHost(0).getVM(1);
+
+    createIndex(vm1);
+    Map<String, TestObject> entries = new HashMap<>();
+
+    entries.put("A", new TestObject("jon ", "value2", "value3"));
+    entries.put("B", new TestObject("don", "EFG", "HIJ"));
+    entries.put("C", new TestObject("eon", "QWE", "RTY"));
+    entries.put("D", new TestObject("kion", "QWE", "RTY"));
+    entries.put("E", new TestObject("ryan", "QWE", "RTY"));
+    putEntries(vm1, entries, 5);
+
+    CommandStringBuilder csb = new 
CommandStringBuilder(LuceneCliStrings.LUCENE_SEARCH_INDEX);
+    csb.addOption(LuceneCliStrings.LUCENE__INDEX_NAME, INDEX_NAME);
+    csb.addOption(LuceneCliStrings.LUCENE__REGION_PATH, REGION_NAME);
+    csb.addOption(LuceneCliStrings.LUCENE_SEARCH_INDEX__QUERY_STRING, 
"field1:jon~");
+    csb.addOption(LuceneCliStrings.LUCENE_SEARCH_INDEX__DEFAULT_FIELD, 
"field1");
+    executeCommandAndLogResult(csb);
+
+    TabularResultData data = (TabularResultData) 
executeCommandAndGetResult(csb).getResultData();
+    assertEquals(4, data.retrieveAllValues("key").size());
+
+    // confirm the order
+    List<String> scoreRatings = data.retrieveAllValues("score");
+    boolean inOrder = IntStream.range(0, scoreRatings.size() - 1)
+        .allMatch(index -> 
scoreRatings.get(index).compareTo(scoreRatings.get(index + 1)) >= 0);
+    assertTrue("Lucene search result not in expected order", inOrder);
+
+  }
+
+  @Test
   public void searchShouldReturnNoResults() throws Exception {
     final VM vm1 = Host.getHost(0).getVM(1);
 

http://git-wip-us.apache.org/repos/asf/geode/blob/208f5ae5/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/cli/LuceneIndexCommandsJUnitTest.java
----------------------------------------------------------------------
diff --git 
a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/cli/LuceneIndexCommandsJUnitTest.java
 
b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/cli/LuceneIndexCommandsJUnitTest.java
index 1adab5a..7d52980 100644
--- 
a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/cli/LuceneIndexCommandsJUnitTest.java
+++ 
b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/cli/LuceneIndexCommandsJUnitTest.java
@@ -27,6 +27,28 @@ import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import junitparams.JUnitParamsRunner;
+import junitparams.Parameters;
+import org.apache.lucene.analysis.Analyzer;
+import org.apache.lucene.analysis.core.KeywordAnalyzer;
+import org.apache.lucene.analysis.standard.StandardAnalyzer;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+
 import org.apache.geode.cache.execute.Execution;
 import org.apache.geode.cache.execute.ResultCollector;
 import org.apache.geode.cache.lucene.internal.LuceneIndexStats;
@@ -47,27 +69,6 @@ import 
org.apache.geode.management.internal.cli.result.ResultBuilder;
 import org.apache.geode.management.internal.cli.result.TabularResultData;
 import org.apache.geode.management.internal.cli.shell.Gfsh;
 import org.apache.geode.test.junit.categories.UnitTest;
-import org.apache.lucene.analysis.Analyzer;
-import org.apache.lucene.analysis.core.KeywordAnalyzer;
-import org.apache.lucene.analysis.standard.StandardAnalyzer;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import junitparams.JUnitParamsRunner;
-import junitparams.Parameters;
 
 /**
  * The LuceneIndexCommandsJUnitTest class is a test suite of test cases 
testing the contract and
@@ -275,9 +276,9 @@ public class LuceneIndexCommandsJUnitTest {
 
     TabularResultData data = (TabularResultData) result.getResultData();
 
-    assertEquals(Arrays.asList("C", "B", "A"), data.retrieveAllValues("key"));
+    assertEquals(Arrays.asList("A", "B", "C"), data.retrieveAllValues("key"));
     assertEquals(Arrays.asList("Result1", "Result1", "Result1"), 
data.retrieveAllValues("value"));
-    assertEquals(Arrays.asList("1.1", "1.2", "1.3"), 
data.retrieveAllValues("score"));
+    assertEquals(Arrays.asList("1.3", "1.2", "1.1"), 
data.retrieveAllValues("score"));
   }
 
   @Ignore
@@ -366,7 +367,7 @@ public class LuceneIndexCommandsJUnitTest {
 
     TabularResultData data = (TabularResultData) result.getResultData();
 
-    assertEquals(Arrays.asList("C", "B", "A"), data.retrieveAllValues("key"));
+    assertEquals(Arrays.asList("A", "B", "C"), data.retrieveAllValues("key"));
   }
 
   @Test

Reply via email to