Merge "Make defaultSearchContextLength and maxCharContextSize customizable."
diff --git a/Changes b/Changes
index e72713d..e101056 100644
--- a/Changes
+++ b/Changes
@@ -1,6 +1,8 @@
-0.63.3 2024-09-24
+0.63.3 2024-11-04
     - [performance] Improve short circuit on count=0 and
       cutoff=true (diewald)
+    - [feature] Make defaultSearchContextLength and maxCharContextSize 
+      customizable (margaretha)  
 
 0.63.2 2024-08-02
     - [bugfix] Fix empty DocIdSetIterator (margaretha)
diff --git a/src/main/java/de/ids_mannheim/korap/response/SearchContext.java b/src/main/java/de/ids_mannheim/korap/response/SearchContext.java
index 7deb78a..752dbd6 100644
--- a/src/main/java/de/ids_mannheim/korap/response/SearchContext.java
+++ b/src/main/java/de/ids_mannheim/korap/response/SearchContext.java
@@ -73,7 +73,7 @@
 
     public class SearchContextSide {
         private boolean isToken = true;
-        private int length = 6;
+        private int length = KrillProperties.defaultSearchContextLength;
         private int maxTokenLength = KrillProperties.maxTokenContextSize;
         private int maxCharLength = KrillProperties.maxCharContextSize;
 
diff --git a/src/main/java/de/ids_mannheim/korap/util/KrillProperties.java b/src/main/java/de/ids_mannheim/korap/util/KrillProperties.java
index 6c6d5b4..6ed4dbc 100644
--- a/src/main/java/de/ids_mannheim/korap/util/KrillProperties.java
+++ b/src/main/java/de/ids_mannheim/korap/util/KrillProperties.java
@@ -22,6 +22,7 @@
     public static int maxTokenMatchSize = 50;
     public static int maxTokenContextSize = 60;
     public static int maxCharContextSize = 500;
+    public static int defaultSearchContextLength = 6;
     
     public static boolean matchExpansionIncludeContextSize = false;
     
@@ -82,6 +83,9 @@
     public static void updateConfigurations (Properties  prop) {
         String maxTokenMatchSize = prop.getProperty("krill.match.max.token");
         String maxTokenContextSize = prop.getProperty("krill.context.max.token");
+        // EM: not implemented yet
+//        String maxCharContextSize = prop.getProperty("krill.context.max.char");
+        String defaultSearchContextLength = prop.getProperty("krill.search.context.default");
 
         try {
             if (maxTokenMatchSize != null) {
@@ -92,6 +96,14 @@
                 KrillProperties.maxTokenContextSize = Integer
                         .parseInt(maxTokenContextSize);
             }
+//            if (maxCharContextSize != null) {
+//                KrillProperties.maxCharContextSize = Integer
+//                        .parseInt(maxCharContextSize);
+//            }
+            if (defaultSearchContextLength != null) {
+                KrillProperties.defaultSearchContextLength = Integer
+                        .parseInt(defaultSearchContextLength);
+            }
         }
         catch (NumberFormatException e) {
             log.error("A Krill property expects numerical values: "
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestMaxContext.java b/src/test/java/de/ids_mannheim/korap/index/TestMaxContext.java
index 239d9eb..6072688 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestMaxContext.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestMaxContext.java
@@ -42,7 +42,7 @@
     }
 
     @Test
-    public void testTokenContextSize () throws IOException {
+    public void testSmallerTokenContextSize () throws IOException {
         
         assertEquals(25, KrillProperties.maxTokenContextSize);
 
@@ -61,7 +61,7 @@
         assertEquals(5, km.getContext().left.getLength());
         assertEquals(5, km.getContext().right.getLength());
     };
-
+    
     @Test
     public void searchWithLargerContextTokenSize ()
             throws JsonMappingException, JsonProcessingException {
@@ -123,4 +123,19 @@
         String rightContext = km.getSnippetBrackets().split("]]")[1];
         assertEquals(KrillProperties.maxCharContextSize,rightContext.length() -4);
     }
+    
+    // for Kokokom
+    @Test
+    public void testIncreaseDefaultSearchContextSize () throws IOException {
+        KrillProperties.defaultSearchContextLength = 1000000000;
+        
+        String jsonQuery = getJsonString(TestMaxContext.class
+                .getResource("/queries/flags/caseInsensitive.jsonld")
+                .getFile());
+        Krill ks = new Krill(jsonQuery);
+        Result kr = ks.apply(ki);
+        Match km = kr.getMatch(0);
+        assertEquals(6089, km.getSnippetBrackets().length());
+        KrillProperties.defaultSearchContextLength = 6;
+    };
 }
diff --git a/src/test/resources/krill.properties b/src/test/resources/krill.properties
index fc26a13..5afab41 100644
--- a/src/test/resources/krill.properties
+++ b/src/test/resources/krill.properties
@@ -9,3 +9,4 @@
 krill.match.expansion.includeContextSize = true
 krill.match.max.token=50
 krill.context.max.token=25
+krill.search.context.default=6
\ No newline at end of file
diff --git a/src/test/resources/queries/flags/caseInsensitive.jsonld b/src/test/resources/queries/flags/caseInsensitive.jsonld
index 7320f52..35f9f5e 100644
--- a/src/test/resources/queries/flags/caseInsensitive.jsonld
+++ b/src/test/resources/queries/flags/caseInsensitive.jsonld
@@ -18,6 +18,6 @@
     "startPage":1,
     "count":25,
     "cutOff":true,
-    "context":"paragraph"
+    "context":"text"
   }
 }