private SearchCriterion domainQueryBuilder(Set<String> emailDomains) { if (emailDomains.size() == 1) { return new FieldCriterion(PeopleIndexFieldConstants.FIELD_EMAIL_DOMAIN, emailDomains.iterator().next()); } else { BooleanCriterion crit = new BooleanCriterion(); crit.setOperator(SearchOperator.OR); for (String domain : emailDomains) { crit.addCriterion(new FieldCriterion(PeopleIndexFieldConstants.FIELD_EMAIL_DOMAIN, domain)); } return crit; } }
public BooleanCriterion fieldConditionsListToBooleanCriterion(List<FieldCondition> conditions, SearchOperator operator) { BooleanCriterion bc = new BooleanCriterion(); bc.setOperator(operator); for (FieldCondition condition : conditions) { SearchCriterion criterion = fieldConditionToFieldCriterion(condition, operator); if (criterion != null) { bc.addCriterion(criterion); } } return bc; }
@Override public SearchCriterion transformFieldCriterion(FieldCriterion criterion, SearchCriterionTransformerHint hint) { for (Entry<String, List<String>> entry : transform.entrySet()) { if (entry.getKey().equals(criterion.getValue().toLowerCase())) { if (entry.getValue().size() > 1 && hint.isExpandFieldValues()) { BooleanCriterion result = new BooleanCriterion(); for (String fieldName : entry.getValue()) { FieldCriterion fieldCriterion = new FieldCriterion(criterion.getField(), fieldName, criterion.isParseFlag()); result.addCriterion(fieldCriterion, SearchOperator.OR); } result.setOperator(criterion.getOperator()); return result; } else { criterion.setValue(entry.getValue().get(0)); } } } return criterion; }
@Override protected BooleanCriterion mergeConditions(List<BooleanCriterion> criterions) { if (CollectionUtils.isEmpty(criterions)) { return null; } BooleanCriterion result = new BooleanCriterion(); result.setOperator(criterions.get(0).getOperator()); Map<String, List<FieldCriterion>> subCriterionsToMerge = new HashMap<>(); List<String> criterionsOrder = new ArrayList<>(); for (BooleanCriterion criterion : criterions) { for(SearchCriterion subCriterion : criterion.getCriteria()){ fieldCriterionMerger.addToMergeList(subCriterionsToMerge, (FieldCriterion) subCriterion); criterionsOrder.add(ListPositionBasedCriterionComparator.extractFieldHash(subCriterion)); } } for (Map.Entry<String, List<FieldCriterion>> entry : subCriterionsToMerge.entrySet()) { FieldCriterion mergedCondition = fieldCriterionMerger.mergeConditions(entry.getValue()); if (mergedCondition != null) { result.getCriteria().add(mergedCondition); } } if (subCriterionsToMerge.size() > 0 && criterionsOrder.size() > 1) { Collections.sort(result.getCriteria(), new ListPositionBasedCriterionComparator<SearchCriterion>(criterionsOrder)); } return result; }
public SearchCriterion transformRequestToSearchCriterion(AdvancedSearchRequest request) { SearchOperator mainOperator = getSearchOperator(request.getExpressionsOperator()); BooleanCriterion bc = new BooleanCriterion(); bc.setOperator(SearchOperator.AND); for (Map.Entry<String, AdvancedFieldCondition> conditionEntry : request.getFieldsHierarchy().entrySet()) { if (conditionEntry.getValue().getConditionType().equals(AdvancedFieldConditionType.NORMAL)) { bc.addCriterion(advancedFieldConditionToBooleanCriterion(conditionEntry.getValue(), mainOperator)); } } if (bc.getCriteria().size() == 1) { return bc.getCriteria().get(0); } return bc; }
public SearchCriterion transformConditionsListToSearchCriterion(List<FieldCondition> conditions, SearchOperator mainOperator) { BooleanCriterion bc = new BooleanCriterion(); bc.setOperator(SearchOperator.AND); for (FieldCondition condition : conditions) { if (condition instanceof AdvancedFieldCondition) { bc.addCriterion(advancedFieldConditionToBooleanCriterion((AdvancedFieldCondition)condition, mainOperator)); } else { bc.addCriterion(fieldConditionToFieldCriterion(condition, mainOperator)); } } if (bc.getCriteria().size() == 1) { return bc.getCriteria().get(0); } return bc; }
expandedCondition.setOperator(SearchOperator.OR);
@Override protected SearchCriterion fieldCriterionHandler(FieldCriterion criterion, SearchScheme scheme, SearchCriterionTransformerHint hint) { List<String> fieldNames = getLanguageFieldName(scheme, criterion.getField()); if (fieldNames.size() > 1 && hint.isExpandFieldValues()) { BooleanCriterion result = new BooleanCriterion(); result.setOperator(SearchOperator.OR); for(String fieldName:fieldNames) { FieldCriterion fieldCriterion = new FieldCriterion(fieldName, criterion.getValue(), criterion.isParseFlag()); result.addCriterion(fieldCriterion, SearchOperator.OR); } return result; }else { String fieldName = fieldNames.get(0); criterion.setField(fieldName); hint.getFieldsUsed().add(fieldName); return criterion; } }
protected SearchCriterion buildAuthorYearCriterion(PublicationMetadata template) { if (template.getYear() == null || template.getAuthors() == null || template.getAuthors().isEmpty()) return null; BooleanCriterion criterion = new BooleanCriterion(); criterion.setOperator(SearchOperator.AND); criterion.addCriterion(new FieldCriterion(MetadataIndexConstants.F_YEAR, template.getYear())); for (PublicationAuthor author : template.getAuthors()) if (author.getSurname() != null) { criterion.addCriterion(new FieldCriterion(MetadataIndexConstants.F_AUTHOR_SURNAME, author.getSurname())); } return criterion; }
public List<PublicationMetadata> matchIds(PublicationMetadata template) { List<PublicationId> ids = template.getIds(); if (ids == null) { ids = Collections.emptyList(); } if (ids.isEmpty()) return Collections.emptyList(); ResultsFormat format = new ResultsFormat(new FieldRequest[] { new FieldRequest(MetadataIndexConstants.F_AUTHOR_NORM), new FieldRequest(MetadataIndexConstants.F_JOURNAL_TITLE), new FieldRequest(MetadataIndexConstants.F_NUMBER), new FieldRequest(MetadataIndexConstants.F_PAGE_FROM), new FieldRequest(MetadataIndexConstants.F_TITLE), new FieldRequest(MetadataIndexConstants.F_VOLUME), new FieldRequest(MetadataIndexConstants.F_YEAR) }); Set<PublicationMetadata> hits = new HashSet<PublicationMetadata>(); BooleanCriterion criterion = new BooleanCriterion(); criterion.setOperator(SearchOperator.OR); for (PublicationId id : ids) { criterion.addCriterion(new FieldCriterion(MetadataIndexConstants.F_IDENTIFIER, idToString(id)), SearchOperator.OR); } FulltextSearchQuery query = new FulltextSearchQuery(0, 100, format, criterion); FulltextSearchResults ci = fulltextIndex.performSearch(query); for (FulltextSearchResult result : ci.getResults()) { PublicationMetadata metadata = documentBuilder.restore(result); hits.add(metadata); } return new ArrayList<PublicationMetadata>(hits); }
SearchCriterion result = null; SearchOperator operator = getSearchOperator(advancedCondition.getSubOperator()); bc.setOperator(parentOperator);
protected SearchCriterion buildAuthorJournalCriterion(PublicationMetadata template) { if (template.getYear() == null || template.getJournal() == null || template.getAuthors() == null || template.getAuthors().isEmpty()) return null; BooleanCriterion criterion = new BooleanCriterion(); criterion.setOperator(SearchOperator.AND); criterion.addCriterion(new FieldCriterion(MetadataIndexConstants.F_YEAR, template.getYear())); criterion.addCriterion(new FieldCriterion(MetadataIndexConstants.F_JOURNAL_HASH, abbreviationDirectory.toAcronym(template.getJournal()))); for (PublicationAuthor author : template.getAuthors()) if (author.getSurname() != null) { criterion.addCriterion(new FieldCriterion(MetadataIndexConstants.F_AUTHOR_SURNAME, author.getSurname())); } return criterion; }