Skip to content

Commit

Permalink
fixed defaultOperator for lucen and solr search
Browse files Browse the repository at this point in the history
Issue imixs#554
  • Loading branch information
rsoika committed Sep 21, 2019
1 parent 0d6c392 commit 1da4634
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -181,6 +183,11 @@ public class DocumentService {

@Inject
protected Event<UserGroupEvent> userGroupEvents;

@Inject
@ConfigProperty(name = "index.defaultOperator", defaultValue = "AND")
private String indexDefaultOperator;


/**
* Returns a comma separated list of additional Access-Roles defined for this
Expand Down Expand Up @@ -804,8 +811,16 @@ public List<ItemCollection> 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);

}

Expand Down Expand Up @@ -856,8 +871,16 @@ public List<ItemCollection> 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);

}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;

Expand Down Expand Up @@ -184,7 +175,7 @@ public List<ItemCollection> search(String searchTerm, int pageSize, int pageInde

try {
IndexSearcher searcher = createIndexSearcher();
QueryParser parser = createQueryParser();
QueryParser parser = createQueryParser(defaultOperator);

parser.setAllowLeadingWildcard(true);

Expand Down Expand Up @@ -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);

Expand Down Expand Up @@ -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 {
Expand All @@ -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;
}

Expand Down

0 comments on commit 1da4634

Please sign in to comment.