You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by fo...@apache.org on 2025/03/03 15:19:22 UTC

(jackrabbit-oak) branch trunk updated: OAK-11536: elastic synonym filter has to be lenient to incorrect rules (#2125)

This is an automated email from the ASF dual-hosted git repository.

fortino pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git


The following commit(s) were added to refs/heads/trunk by this push:
     new 6c2f14621d OAK-11536: elastic synonym filter has to be lenient to incorrect rules (#2125)
6c2f14621d is described below

commit 6c2f14621da3a7091521fe2594acd6e48c379498
Author: Fabrizio Fortino <fa...@gmail.com>
AuthorDate: Mon Mar 3 16:19:17 2025 +0100

    OAK-11536: elastic synonym filter has to be lenient to incorrect rules (#2125)
    
    * OAK-11536: elastic synonym filter has to be lenient to incorrect rules
    
    * OAK-11536: improve code reuse in ElasticIndexWriter
    
    * OAK-11536: fix import error after merge
---
 .../elastic/index/ElasticCustomAnalyzerMappings.java     | 11 ++++++++---
 .../plugins/index/elastic/index/ElasticIndexWriter.java  | 16 +++-------------
 .../oak/plugins/index/FullTextAnalyzerCommonTest.java    |  6 +++++-
 3 files changed, 16 insertions(+), 17 deletions(-)

diff --git a/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticCustomAnalyzerMappings.java b/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticCustomAnalyzerMappings.java
index 97204a5556..640c85e9c9 100644
--- a/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticCustomAnalyzerMappings.java
+++ b/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticCustomAnalyzerMappings.java
@@ -187,9 +187,14 @@ public class ElasticCustomAnalyzerMappings {
                 reKey.apply(luceneParams, Map.of("mapping", "mappings"))
         );
 
-        LUCENE_ELASTIC_TRANSFORMERS.put(SynonymFilterFactory.class, luceneParams ->
-                reKey.apply(luceneParams, Map.of("tokenizerFactory", "tokenizer"))
-        );
+        LUCENE_ELASTIC_TRANSFORMERS.put(SynonymFilterFactory.class, luceneParams -> {
+            // lucene does not support this option (see UNSUPPORTED_LUCENE_PARAMETERS) and it's lenient by default
+            // elastic is not lenient by default, so we need to set it to true in case it's not present
+            if (!luceneParams.containsKey("lenient")) {
+                luceneParams.put("lenient", "true");
+            }
+            return reKey.apply(luceneParams, Map.of("tokenizerFactory", "tokenizer"));
+        });
 
         LUCENE_ELASTIC_TRANSFORMERS.put(KeywordMarkerFilterFactory.class, luceneParams ->
                 reKey.apply(luceneParams, Map.of("protected", "keywords"))
diff --git a/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticIndexWriter.java b/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticIndexWriter.java
index bb9149c0fd..59d9ba3873 100644
--- a/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticIndexWriter.java
+++ b/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticIndexWriter.java
@@ -16,7 +16,7 @@
  */
 package org.apache.jackrabbit.oak.plugins.index.elastic.index;
 
-import co.elastic.clients.elasticsearch._types.AcknowledgedResponseBase;
+import co.elastic.clients.elasticsearch._types.AcknowledgedResponse;
 import co.elastic.clients.elasticsearch._types.ElasticsearchException;
 import co.elastic.clients.elasticsearch.indices.CreateIndexRequest;
 import co.elastic.clients.elasticsearch.indices.CreateIndexResponse;
@@ -186,11 +186,7 @@ class ElasticIndexWriter implements FulltextIndexWriter<ElasticDocument> {
         }
 
         final CreateIndexRequest request = ElasticIndexHelper.createIndexRequest(indexName, indexDefinition);
-        if (LOG.isDebugEnabled()) {
-            StringBuilder sb = new StringBuilder();
-            JsonpUtils.toString(request, sb);
-            LOG.debug("Creating Index with request {}", sb);
-        }
+        LOG.debug("Creating Index with request {}", request);
         // create the new index
         try {
             final CreateIndexResponse response = esClient.create(request);
@@ -268,13 +264,7 @@ class ElasticIndexWriter implements FulltextIndexWriter<ElasticDocument> {
         deleteOldIndices(client, aliasResponse.result().keySet());
     }
 
-    private void checkResponseAcknowledgement(AcknowledgedResponseBase response, String exceptionMessage) {
-        if (!response.acknowledged()) {
-            throw new IllegalStateException(exceptionMessage);
-        }
-    }
-
-    private void checkResponseAcknowledgement(CreateIndexResponse response, String exceptionMessage) {
+    private void checkResponseAcknowledgement(AcknowledgedResponse response, String exceptionMessage) {
         if (!response.acknowledged()) {
             throw new IllegalStateException(exceptionMessage);
         }
diff --git a/oak-search/src/test/java/org/apache/jackrabbit/oak/plugins/index/FullTextAnalyzerCommonTest.java b/oak-search/src/test/java/org/apache/jackrabbit/oak/plugins/index/FullTextAnalyzerCommonTest.java
index b052f6268c..d6db2b511d 100644
--- a/oak-search/src/test/java/org/apache/jackrabbit/oak/plugins/index/FullTextAnalyzerCommonTest.java
+++ b/oak-search/src/test/java/org/apache/jackrabbit/oak/plugins/index/FullTextAnalyzerCommonTest.java
@@ -1005,7 +1005,11 @@ public abstract class FullTextAnalyzerCommonTest extends AbstractQueryTest {
             Tree synFilter = addFilter(filters, "Synonym");
             synFilter.setProperty("synonyms", "syn.txt");
             synFilter.addChild("syn.txt").addChild(JCR_CONTENT)
-                    .setProperty(JCR_DATA, "plane, airplane, aircraft\nflies=>scars");
+                    .setProperty(JCR_DATA, "plane, airplane, aircraft\n" +
+                            "flies=>scars\n" +
+                            // this rule is incorrect: "term: + was completely eliminated by analyzer"
+                            // by default, the configuration has to be lenient and not fail on such cases
+                            "plus,+,addition");
         });
 
         Tree content = root.getTree("/").addChild("content");