Author: fortino
Date: Fri Jun 26 15:50:04 2020
New Revision: 1879243

URL: http://svn.apache.org/viewvc?rev=1879243&view=rev
Log:
OAK-9123: fix immense term error + performance regression on multi term full 
text queries

Modified:
    
jackrabbit/oak/trunk/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticIndexHelper.java
    
jackrabbit/oak/trunk/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticIndexWriter.java
    
jackrabbit/oak/trunk/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/ElasticRequestHandler.java
    
jackrabbit/oak/trunk/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticContentTest.java
    
jackrabbit/oak/trunk/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticFullTextAsyncTest.java
    
jackrabbit/oak/trunk/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticPerfTest.java
    
jackrabbit/oak/trunk/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticTestUtils.java
    
jackrabbit/oak/trunk/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticIndexWriterTest.java
    jackrabbit/oak/trunk/oak-search-elastic/src/test/resources/logback-test.xml

Modified: 
jackrabbit/oak/trunk/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticIndexHelper.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticIndexHelper.java?rev=1879243&r1=1879242&r2=1879243&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticIndexHelper.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticIndexHelper.java
 Fri Jun 26 15:50:04 2020
@@ -182,6 +182,7 @@ class ElasticIndexHelper {
                         {
                             mappingBuilder.startObject("keyword")
                                     .field("type", "keyword")
+                                    .field("ignore_above", 256)
                                     .endObject();
                             if (useInSpellCheck) {
                                 mappingBuilder.startObject("trigram")
@@ -192,7 +193,9 @@ class ElasticIndexHelper {
                         mappingBuilder.endObject();
                     } else {
                         // always add keyword for sorting / faceting
-                        mappingBuilder.field("type", "keyword");
+                        mappingBuilder
+                                .field("type", "keyword")
+                                .field("ignore_above", 256);
                     }
                 }
             }

Modified: 
jackrabbit/oak/trunk/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticIndexWriter.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticIndexWriter.java?rev=1879243&r1=1879242&r2=1879243&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticIndexWriter.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticIndexWriter.java
 Fri Jun 26 15:50:04 2020
@@ -232,7 +232,7 @@ class ElasticIndexWriter implements Full
             // init update status
             updatesMap.put(executionId, Boolean.FALSE);
 
-            LOG.info("Sending bulk with id {} -> {}", executionId, 
bulkRequest.getDescription());
+            LOG.debug("Sending bulk with id {} -> {}", executionId, 
bulkRequest.getDescription());
             if (LOG.isTraceEnabled()) {
                 LOG.trace("Bulk Requests: \n{}", bulkRequest.requests()
                         .stream()
@@ -244,7 +244,7 @@ class ElasticIndexWriter implements Full
 
         @Override
         public void afterBulk(long executionId, BulkRequest bulkRequest, 
BulkResponse bulkResponse) {
-            LOG.info("Bulk with id {} processed with status {} in {}", 
executionId, bulkResponse.status(), bulkResponse.getTook());
+            LOG.debug("Bulk with id {} processed with status {} in {}", 
executionId, bulkResponse.status(), bulkResponse.getTook());
             if (LOG.isTraceEnabled()) {
                 try {
                     
LOG.trace(Strings.toString(bulkResponse.toXContent(jsonBuilder(), 
EMPTY_PARAMS)));

Modified: 
jackrabbit/oak/trunk/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/ElasticRequestHandler.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/ElasticRequestHandler.java?rev=1879243&r1=1879242&r2=1879243&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/ElasticRequestHandler.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/ElasticRequestHandler.java
 Fri Jun 26 15:50:04 2020
@@ -275,7 +275,7 @@ public class ElasticRequestHandler {
             }
 
             private boolean visitTerm(String propertyName, String text, String 
boost, boolean not) {
-                String p = getLuceneFieldName(propertyName, pr);
+                String p = getElasticFieldName(propertyName, pr);
                 QueryBuilder q = tokenToQuery(text, p, pr);
                 if (boost != null) {
                     q.boost(Float.parseFloat(boost));
@@ -312,8 +312,8 @@ public class ElasticRequestHandler {
                 break;
             case DIRECT_CHILDREN:
                 BoolQueryBuilder bq = boolQuery()
-                    .must(newAncestorQuery(path))
-                    .must(newDepthQuery(path, planResult));
+                        .must(newAncestorQuery(path))
+                        .must(newDepthQuery(path, planResult));
                 queries.add(bq);
                 break;
             case EXACT:
@@ -464,22 +464,24 @@ public class ElasticRequestHandler {
     }
 
     private static QueryBuilder tokenToQuery(String text, String fieldName, 
PlanResult pr) {
+        // default match query are executed in OR, we need to use AND instead 
to avoid that
+        // every document having at least one term in the `text` will match. 
If there are multiple
+        // contains clause they will go to different match queries and will be 
executed in OR
         QueryBuilder ret;
         IndexDefinition.IndexingRule indexingRule = pr.indexingRule;
         //Expand the query on fulltext field
-        if (FieldNames.FULLTEXT.equals(fieldName) &&
-                !indexingRule.getNodeScopeAnalyzedProps().isEmpty()) {
+        if (FieldNames.FULLTEXT.equals(fieldName) && 
!indexingRule.getNodeScopeAnalyzedProps().isEmpty()) {
             BoolQueryBuilder in = boolQuery();
             for (PropertyDefinition pd : 
indexingRule.getNodeScopeAnalyzedProps()) {
-                QueryBuilder q = matchQuery(pd.name, text).boost(pd.boost);
+                QueryBuilder q = matchQuery(pd.name, 
text).boost(pd.boost).operator(Operator.AND);
                 in.should(q);
             }
 
             //Add the query for actual fulltext field also. That query would 
not be boosted
             // TODO: do we need this if all the analyzed fields are queried?
-            ret = in.should(matchQuery(fieldName, text));
+            ret = in.should(matchQuery(fieldName, 
text).operator(Operator.AND));
         } else {
-            ret = matchQuery(fieldName, text);
+            ret = matchQuery(fieldName, text).operator(Operator.AND);
         }
 
         return ret;
@@ -532,7 +534,7 @@ public class ElasticRequestHandler {
         throw new IllegalStateException("PropertyRestriction not handled " + 
pr + " for index " + defn);
     }
 
-    private static String getLuceneFieldName(@Nullable String p, PlanResult 
pr) {
+    private static String getElasticFieldName(@Nullable String p, PlanResult 
pr) {
         if (p == null) {
             return FieldNames.FULLTEXT;
         }

Modified: 
jackrabbit/oak/trunk/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticContentTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticContentTest.java?rev=1879243&r1=1879242&r2=1879243&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticContentTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticContentTest.java
 Fri Jun 26 15:50:04 2020
@@ -24,6 +24,7 @@ import org.junit.Test;
 import java.util.Random;
 import java.util.UUID;
 
+import static 
org.apache.jackrabbit.oak.plugins.index.elastic.ElasticTestUtils.randomString;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertTrue;
@@ -34,14 +35,13 @@ public class ElasticContentTest extends
     public void indexWithAnalyzedProperty() throws Exception {
         IndexDefinitionBuilder builder = createIndex("a").noAsync();
         builder.indexRule("nt:base").property("a").analyzed();
-        String testId = UUID.randomUUID().toString();
-        Tree index = setIndex(testId, builder);
+        Tree index = setIndex(UUID.randomUUID().toString(), builder);
         root.commit();
 
         assertTrue(exists(index));
         assertThat(0L, equalTo(countDocuments(index)));
 
-        Tree content = root.getTree("/").addChild(testId);
+        Tree content = root.getTree("/").addChild("content");
         content.addChild("indexed").setProperty("a", "foo");
         content.addChild("not-indexed").setProperty("b", "foo");
         root.commit();
@@ -65,13 +65,12 @@ public class ElasticContentTest extends
     public void indexWithAnalyzedNodeScopeIndexProperty() throws Exception {
         IndexDefinitionBuilder builder = createIndex("a").noAsync();
         builder.indexRule("nt:base").property("a").analyzed().nodeScopeIndex();
-        String testId = UUID.randomUUID().toString();
-        Tree index = setIndex(testId, builder);
+        Tree index = setIndex(UUID.randomUUID().toString(), builder);
         root.commit();
 
         assertThat(0L, equalTo(countDocuments(index)));
 
-        Tree content = root.getTree("/").addChild(testId);
+        Tree content = root.getTree("/").addChild("content");
         content.addChild("indexed").setProperty("a", "foo");
         content.addChild("not-indexed").setProperty("b", "foo");
         root.commit();
@@ -83,8 +82,7 @@ public class ElasticContentTest extends
     public void indexContentWithLongPath() throws Exception {
         IndexDefinitionBuilder builder = createIndex("a").noAsync();
         builder.indexRule("nt:base").property("a").analyzed();
-        String testId = UUID.randomUUID().toString();
-        Tree index = setIndex(testId, builder);
+        Tree index = setIndex(UUID.randomUUID().toString(), builder);
         root.commit();
 
         assertTrue(exists(index));
@@ -100,7 +98,7 @@ public class ElasticContentTest extends
                 .collect(StringBuilder::new, StringBuilder::appendCodePoint, 
StringBuilder::append)
                 .toString();
 
-        Tree content = root.getTree("/").addChild(testId);
+        Tree content = root.getTree("/").addChild("content");
         content.addChild(generatedPath).setProperty("a", "foo");
         root.commit();
 
@@ -120,4 +118,21 @@ public class ElasticContentTest extends
         index = setIndex(testId, builder);
         root.commit();
     }
+
+    @Test
+    public void analyzedFieldWithLongValue() throws Exception {
+        IndexDefinitionBuilder builder = createIndex("a").noAsync();
+        builder.indexRule("nt:base").property("a").analyzed();
+        Tree index = setIndex(UUID.randomUUID().toString(), builder);
+        root.commit();
+
+        assertTrue(exists(index));
+        assertThat(0L, equalTo(countDocuments(index)));
+
+        Tree content = root.getTree("/").addChild("content");
+        content.addChild("indexed1").setProperty("a", randomString(33409)); // 
max length is 32766
+        root.commit();
+
+        assertEventually(() -> assertThat(countDocuments(index), equalTo(1L)));
+    }
 }

Modified: 
jackrabbit/oak/trunk/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticFullTextAsyncTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticFullTextAsyncTest.java?rev=1879243&r1=1879242&r2=1879243&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticFullTextAsyncTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticFullTextAsyncTest.java
 Fri Jun 26 15:50:04 2020
@@ -40,7 +40,8 @@ public class ElasticFullTextAsyncTest ex
         builder.async("async");
         builder.indexRule("nt:base").property("propa").analyzed();
 
-        setIndex("test1", builder);
+        String indexId = UUID.randomUUID().toString();
+        setIndex(indexId, builder);
         root.commit();
 
         //add content
@@ -51,16 +52,62 @@ public class ElasticFullTextAsyncTest ex
         test.addChild("c").setProperty("propa", "Hello everyone. This is an 
elastic test");
         test.addChild("d").setProperty("propa", "howdy! hello again");
         root.commit();
-               
+
         String query = "//*[jcr:contains(@propa, 'Hello')] ";
 
         assertEventually(() -> {
-            assertThat(explain(query, XPATH), 
containsString("elasticsearch:test1"));
+            assertThat(explain(query, XPATH), containsString("elasticsearch:" 
+ indexId));
             assertQuery(query, XPATH, Arrays.asList("/test/a", "/test/c", 
"/test/d"));
         });
     }
 
     @Test
+    public void testNodeScopeIndexedQuery() throws Exception {
+        IndexDefinitionBuilder builder = createIndex("a", "b").async("async");
+        builder.indexRule("nt:base").property("a").analyzed().nodeScopeIndex();
+        builder.indexRule("nt:base").property("b").analyzed().nodeScopeIndex();
+
+        setIndex(UUID.randomUUID().toString(), builder);
+        root.commit();
+
+        //add content
+        Tree test = root.getTree("/").addChild("test");
+
+        test.addChild("a").setProperty("a", "hello");
+        test.addChild("b").setProperty("a", "world");
+        test.addChild("c").setProperty("a", "hello world");
+        Tree d = test.addChild("d");
+        d.setProperty("a", "hello");
+        d.setProperty("b", "world");
+        root.commit();
+
+        assertEventually(() -> {
+            assertQuery("//*[jcr:contains(., 'Hello')] ", XPATH, 
Arrays.asList("/test/a", "/test/c", "/test/d"));
+            assertQuery("//*[jcr:contains(., 'hello world')] ", XPATH, 
Arrays.asList("/test/c", "/test/d"));
+        });
+    }
+
+    @Test
+    public void testFullTextMultiTermQuery() throws Exception {
+        IndexDefinitionBuilder builder = createIndex("analyzed_field");
+        builder.async("async");
+        builder.indexRule("nt:base").property("analyzed_field").analyzed();
+
+        setIndex(UUID.randomUUID().toString(), builder);
+        root.commit();
+
+        //add content
+        Tree test = root.getTree("/").addChild("test");
+        test.addChild("a").setProperty("analyzed_field", "test123");
+        test.addChild("b").setProperty("analyzed_field", "test456");
+        root.commit();
+
+        assertEventually(() ->
+                assertQuery("//*[jcr:contains(@analyzed_field, 'test123')] ", 
XPATH, Collections.singletonList("/test/a"))
+        );
+    }
+
+    @Test
     public void testDefaultAnalyzer() throws Exception {
         IndexDefinitionBuilder builder = createIndex("analyzed_field");
         builder.async("async");

Modified: 
jackrabbit/oak/trunk/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticPerfTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticPerfTest.java?rev=1879243&r1=1879242&r2=1879243&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticPerfTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticPerfTest.java
 Fri Jun 26 15:50:04 2020
@@ -16,7 +16,6 @@
  */
 package org.apache.jackrabbit.oak.plugins.index.elastic;
 
-
 import org.apache.jackrabbit.oak.api.Result;
 import org.apache.jackrabbit.oak.api.ResultRow;
 import org.apache.jackrabbit.oak.api.Tree;
@@ -30,12 +29,15 @@ import org.slf4j.LoggerFactory;
 
 import java.util.Iterator;
 import java.util.Random;
+import java.util.UUID;
+import java.util.function.Supplier;
 
 import static org.apache.jackrabbit.oak.api.QueryEngine.NO_BINDINGS;
-
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /*
-This can be used as a quick means to get some numbers around elastic query 
perf during dev cycles 
+This can be used as a quick means to get some numbers around elastic query 
perf during dev cycles
 to compare between old code and new
 Disabled by default as these tests don't assert anything and might be time 
consuming.
 To enable perf logs add <logger 
name="org.apache.jackrabbit.oak.plugins.index.elastic.ElasticPerfTest" 
level="TRACE"/>
@@ -48,13 +50,15 @@ public class ElasticPerfTest extends Ela
     private static final PerfLogger LOG_PERF = new PerfLogger(LOG);
     // Change these to modify the amount of test data created/indexed
     // and the number of times the queries will be executed
-    private int NUM_SUB_CONTENT = 500;
-    private int NUM_NODES = 500;
-    private int NUM_ITERATIONS = 500;
-    private String PROP_1 = "foo";
-    private String PROP_2 = "title";
-    private String PROP_3 = "text";
-    private String SAMPLE_TEXT = "Lorem ipsum dolor sit amet, consectetur 
adipiscing elit";
+    private static final int NUM_SUB_CONTENT = 500;
+    private static final int NUM_NODES = 500;
+    private static final int NUM_ITERATIONS = 500;
+    private static final String PROP_1 = "foo";
+    private static final String PROP_2 = "title";
+    private static final String PROP_3 = "text";
+    private static final String SAMPLE_TEXT = "Lorem ipsum dolor sit amet, 
consectetur adipiscing elit";
+
+    private Tree index;
 
     @Before
     public void createIndexes() throws Exception {
@@ -64,19 +68,15 @@ public class ElasticPerfTest extends Ela
         builder.indexRule("nt:base").property(PROP_3).analyzed();
         builder.indexRule("nt:base").property(PROP_1).analyzed();
 
-        setIndex("testIndex", builder);
+        this.index = setIndex(UUID.randomUUID().toString(), builder);
         root.commit();
-
-        createTestData();
-        // Allow indexing to catch up .
-        Thread.sleep(2500);
-
     }
 
     // Executes the same query multiple times for NUM_ITERATIONS
     @Test
-    public void testFullTextQuery() throws Exception {
-        String query = "//*[jcr:contains(@text, 'Lorem')] ";
+    public void testFullTextSingleQuery() throws Exception {
+        createTestData();
+        String query = "//*[jcr:contains(@text, 'elit" + (NUM_NODES / 2) + 
"')] ";
         long startTest = LOG_PERF.start("Starting test executions");
         for (int j = 0; j < NUM_ITERATIONS; j++) {
             testQuery(query, XPATH);
@@ -86,7 +86,21 @@ public class ElasticPerfTest extends Ela
 
     // Executes different queries each time
     @Test
-    public void testFullTextQuery2() throws Exception {
+    public void testFullTextMultiQuery() throws Exception {
+        createTestData();
+        long startTest = LOG_PERF.start("Starting test executions");
+        Random rndm = new Random(42);
+        for (int j = 0; j < NUM_ITERATIONS; j++) {
+            String query = "//*[jcr:contains(@text, 'elit" + 
rndm.nextInt(NUM_NODES) + "')] ";
+            testQuery(query, XPATH);
+        }
+        LOG_PERF.end(startTest, -1, "{} iterations of tests completed", 
NUM_ITERATIONS);
+    }
+
+    @Test
+    public void testFullTextMultiQueryWithExtraText() throws Exception {
+        Random randomText = new Random(42);
+        createTestData(() -> ElasticTestUtils.randomString(randomText, 1000));
         long startTest = LOG_PERF.start("Starting test executions");
         Random rndm = new Random(42);
         for (int j = 0; j < NUM_ITERATIONS; j++) {
@@ -97,7 +111,8 @@ public class ElasticPerfTest extends Ela
     }
 
     @Test
-    public void testPropertyQuery() throws Exception {
+    public void testPropertySingleQuery() throws Exception {
+        createTestData();
         String query = "select [jcr:path] from [nt:base] where [title] = 
'Title for node0'";
         long startTest = LOG_PERF.start("Starting test executions");
         for (int j = 0; j < NUM_ITERATIONS; j++) {
@@ -109,7 +124,8 @@ public class ElasticPerfTest extends Ela
 
     // Executes different queries in the test iterations
     @Test
-    public void testPropertyQuery2() throws Exception {
+    public void testPropertyMultiQuery() throws Exception {
+        createTestData();
         long startTest = LOG_PERF.start("Starting test executions");
         Random rndm = new Random(42);
         for (int j = 0; j < NUM_ITERATIONS; j++) {
@@ -119,8 +135,12 @@ public class ElasticPerfTest extends Ela
         LOG_PERF.end(startTest, -1, "{} iterations of tests completed", 
NUM_ITERATIONS);
     }
 
-
     private void createTestData() throws Exception {
+        createTestData(null);
+    }
+
+    private void createTestData(Supplier<String> extraContentSupplier) throws 
Exception {
+        long start = LOG_PERF.start("Starting data indexing");
         Tree content = root.getTree("/").addChild("content");
 
         for (int i = 0; i < NUM_SUB_CONTENT; i++) {
@@ -130,11 +150,20 @@ public class ElasticPerfTest extends Ela
             for (int j = 0; j < NUM_NODES; j++) {
                 Tree node = subContent.addChild("node" + j);
                 node.setProperty(PROP_2, "Title for node" + j);
-                node.setProperty(PROP_3, SAMPLE_TEXT + j);
+                String text = SAMPLE_TEXT + j;
+                if (extraContentSupplier != null) {
+                    text += "\n" + extraContentSupplier.get();
+                }
+                node.setProperty(PROP_3, text);
             }
+            root.commit();
         }
-        root.commit();
 
+        // Allow indexing to catch up
+        assertEventually(() ->
+                assertThat(countDocuments(index), equalTo((long) 
((NUM_SUB_CONTENT * NUM_NODES) + NUM_SUB_CONTENT)))
+        );
+        LOG_PERF.end(start, -1, "{} documents indexed", countDocuments(index));
     }
 
     private void testQuery(String query, String language) throws Exception {
@@ -144,8 +173,8 @@ public class ElasticPerfTest extends Ela
         long start = LOG_PERF.start("Getting result rows");
         int i = 0;
         while (iterator.hasNext()) {
-            i++;
             ResultRow row = iterator.next();
+            i++;
         }
         LOG_PERF.end(start, -1, "{} Results fetched", i);
     }

Modified: 
jackrabbit/oak/trunk/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticTestUtils.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticTestUtils.java?rev=1879243&r1=1879242&r2=1879243&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticTestUtils.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticTestUtils.java
 Fri Jun 26 15:50:04 2020
@@ -19,6 +19,8 @@ package org.apache.jackrabbit.oak.plugin
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.util.Random;
+
 public final class ElasticTestUtils {
     private static final Logger LOG = 
LoggerFactory.getLogger(ElasticTestUtils.class);
 
@@ -51,4 +53,18 @@ public final class ElasticTestUtils {
             }
         }
     }
+
+    public static String randomString(int size) {
+        return randomString(new Random(42), size);
+    }
+
+    public static String randomString(Random random, int size) {
+        int leftLimit = 48; // '0'
+        int rightLimit = 122; // char '~'
+
+        return random.ints(leftLimit, rightLimit + 1)
+                .limit(size)
+                .collect(StringBuilder::new, StringBuilder::appendCodePoint, 
StringBuilder::append)
+                .toString();
+    }
 }

Modified: 
jackrabbit/oak/trunk/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticIndexWriterTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticIndexWriterTest.java?rev=1879243&r1=1879242&r2=1879243&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticIndexWriterTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticIndexWriterTest.java
 Fri Jun 26 15:50:04 2020
@@ -27,8 +27,7 @@ import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
-import java.util.Random;
-
+import static 
org.apache.jackrabbit.oak.plugins.index.elastic.ElasticTestUtils.randomString;
 import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.number.OrderingComparison.lessThan;
@@ -96,15 +95,7 @@ public class ElasticIndexWriterTest {
 
     @Test
     public void longDocumentPath() {
-        int leftLimit = 48; // '0'
-        int rightLimit = 122; // char '~'
-        int targetStringLength = 1024;
-        final Random random = new Random(42);
-
-        String generatedPath = random.ints(leftLimit, rightLimit + 1)
-                .limit(targetStringLength)
-                .collect(StringBuilder::new, StringBuilder::appendCodePoint, 
StringBuilder::append)
-                .toString();
+        String generatedPath = randomString(1024);
 
         indexWriter.updateDocument(generatedPath, new 
ElasticDocument(generatedPath));
 

Modified: 
jackrabbit/oak/trunk/oak-search-elastic/src/test/resources/logback-test.xml
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-search-elastic/src/test/resources/logback-test.xml?rev=1879243&r1=1879242&r2=1879243&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-search-elastic/src/test/resources/logback-test.xml 
(original)
+++ jackrabbit/oak/trunk/oak-search-elastic/src/test/resources/logback-test.xml 
Fri Jun 26 15:50:04 2020
@@ -30,6 +30,9 @@
     </appender>
 
     <!--
+    <logger 
name="org.apache.jackrabbit.oak.plugins.index.elastic.ElasticPerfTest" 
level="TRACE"/>
+    -->
+    <!--
     <logger name="org.apache.jackrabbit.oak.plugins.index.elastic" 
level="TRACE" />
     -->
 


Reply via email to