From 1da4634a1501994175efdb44603e2b29de764ebc Mon Sep 17 00:00:00 2001 From: Ralph Soika Date: Sat, 21 Sep 2019 17:01:37 +0200 Subject: [PATCH] fixed defaultOperator for lucen and solr search Issue #554 --- .../workflow/engine/DocumentService.java | 29 +++++++++++++++++-- .../engine/lucene/LuceneIndexService.java | 2 -- .../engine/lucene/LuceneSearchService.java | 22 ++++---------- 3 files changed, 32 insertions(+), 21 deletions(-) diff --git a/imixs-workflow-engine/src/main/java/org/imixs/workflow/engine/DocumentService.java b/imixs-workflow-engine/src/main/java/org/imixs/workflow/engine/DocumentService.java index cc562f615..5fca92dc2 100644 --- a/imixs-workflow-engine/src/main/java/org/imixs/workflow/engine/DocumentService.java +++ b/imixs-workflow-engine/src/main/java/org/imixs/workflow/engine/DocumentService.java @@ -58,8 +58,10 @@ import javax.persistence.PersistenceContext; import javax.persistence.Query; +import org.eclipse.microprofile.config.inject.ConfigProperty; import org.imixs.workflow.ItemCollection; import org.imixs.workflow.WorkflowKernel; +import org.imixs.workflow.engine.index.DefaultOperator; import org.imixs.workflow.engine.index.SearchService; import org.imixs.workflow.engine.index.SortOrder; import org.imixs.workflow.engine.index.UpdateService; @@ -181,6 +183,11 @@ public class DocumentService { @Inject protected Event userGroupEvents; + + @Inject + @ConfigProperty(name = "index.defaultOperator", defaultValue = "AND") + private String indexDefaultOperator; + /** * Returns a comma separated list of additional Access-Roles defined for this @@ -804,8 +811,16 @@ public List find(String searchTerm, int pageSize, int pageIndex, // flush eventlog (see issue #411) indexUpdateService.updateIndex(); - - return indexSearchService.search(searchTerm, pageSize, pageIndex, sortOrder, null,false); + + // evaluate default index operator + DefaultOperator defaultOperator=null; + + if (indexDefaultOperator != null && "OR".equals(indexDefaultOperator.toUpperCase())) { + defaultOperator=DefaultOperator.OR; + } else { + defaultOperator=DefaultOperator.AND; + } + return indexSearchService.search(searchTerm, pageSize, pageIndex, sortOrder, defaultOperator, false); } @@ -856,8 +871,16 @@ public List findStubs(String searchTerm, int pageSize, int pageI // flush eventlog (see issue #411) indexUpdateService.updateIndex(); + // evaluate default index operator + DefaultOperator defaultOperator=null;; + if (indexDefaultOperator != null && "OR".equals(indexDefaultOperator.toUpperCase())) { + defaultOperator=DefaultOperator.OR; + } else { + defaultOperator=DefaultOperator.AND; + } + // find stubs only! - return indexSearchService.search(searchTerm, pageSize, pageIndex, sortOrder, null, true); + return indexSearchService.search(searchTerm, pageSize, pageIndex, sortOrder, defaultOperator, true); } diff --git a/imixs-workflow-index-lucene/src/main/java/org/imixs/workflow/engine/lucene/LuceneIndexService.java b/imixs-workflow-index-lucene/src/main/java/org/imixs/workflow/engine/lucene/LuceneIndexService.java index 33cc7bbbf..b497c4528 100644 --- a/imixs-workflow-index-lucene/src/main/java/org/imixs/workflow/engine/lucene/LuceneIndexService.java +++ b/imixs-workflow-index-lucene/src/main/java/org/imixs/workflow/engine/lucene/LuceneIndexService.java @@ -91,8 +91,6 @@ public class LuceneIndexService { private SimpleDateFormat luceneDateFormat=new SimpleDateFormat("yyyyMMddHHmmss"); - - @Inject @ConfigProperty(name = "lucence.indexDir", defaultValue = DEFAULT_INDEX_DIRECTORY) private String luceneIndexDir; diff --git a/imixs-workflow-index-lucene/src/main/java/org/imixs/workflow/engine/lucene/LuceneSearchService.java b/imixs-workflow-index-lucene/src/main/java/org/imixs/workflow/engine/lucene/LuceneSearchService.java index 809ccfedb..d7b224678 100644 --- a/imixs-workflow-index-lucene/src/main/java/org/imixs/workflow/engine/lucene/LuceneSearchService.java +++ b/imixs-workflow-index-lucene/src/main/java/org/imixs/workflow/engine/lucene/LuceneSearchService.java @@ -58,7 +58,6 @@ import org.apache.lucene.search.TopScoreDocCollector; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; -import org.eclipse.microprofile.config.inject.ConfigProperty; import org.imixs.workflow.ItemCollection; import org.imixs.workflow.WorkflowKernel; import org.imixs.workflow.engine.DocumentService; @@ -98,14 +97,6 @@ public class LuceneSearchService implements SearchService { // number of hits public static final int DEFAULT_PAGE_SIZE = 100; // default docs in one page - @Inject - @ConfigProperty(name = "index.defaultOperator", defaultValue = "AND") - private String luceneDefaultOperator; - - @Inject - @ConfigProperty(name = "index.splitOnWhitespace", defaultValue = "true") - private boolean luceneSplitOnWhitespace; - @Inject private LuceneIndexService luceneIndexService; @@ -184,7 +175,7 @@ public List search(String searchTerm, int pageSize, int pageInde try { IndexSearcher searcher = createIndexSearcher(); - QueryParser parser = createQueryParser(); + QueryParser parser = createQueryParser(defaultOperator); parser.setAllowLeadingWildcard(true); @@ -327,7 +318,7 @@ public int getTotalHits(final String _searchTerm, final int _maxResult, final De try { IndexSearcher searcher = createIndexSearcher(); - QueryParser parser = createQueryParser(); + QueryParser parser = createQueryParser(defaultOperator); parser.setAllowLeadingWildcard(true); @@ -432,12 +423,12 @@ IndexSearcher createIndexSearcher() throws IOException { * @param prop * @return */ - QueryParser createQueryParser() { + QueryParser createQueryParser(DefaultOperator defaultOperator) { // use the keywordAnalyzer for searching a search term. QueryParser parser = new QueryParser("content", new KeywordAnalyzer()); // set default operator to 'AND' if not defined by property setting // String defaultOperator = prop.getProperty("lucene.defaultOperator"); - if (luceneDefaultOperator != null && "OR".equals(luceneDefaultOperator.toUpperCase())) { + if (defaultOperator == DefaultOperator.OR) { logger.finest("......DefaultOperator: OR"); parser.setDefaultOperator(org.apache.lucene.queryparser.classic.QueryParser.Operator.OR); } else { @@ -446,9 +437,8 @@ QueryParser createQueryParser() { } // set setSplitOnWhitespace (issue #438) - logger.finest("......SplitOnWhitespace: " + luceneSplitOnWhitespace); - parser.setSplitOnWhitespace(luceneSplitOnWhitespace); - + // we do no longer support a config parameter here! + parser.setSplitOnWhitespace(true); return parser; }