@Override protected void addToMergeList(Map<String, List<FieldCriterion>> criterionsToMerge, FieldCriterion criterionToMerge) { if (!criterionsToMerge.containsKey(criterionToMerge.getField())) { criterionsToMerge.put(criterionToMerge.getField(), new LinkedList<FieldCriterion>()); } criterionsToMerge.get(criterionToMerge.getField()).add(criterionToMerge); }
@Override protected FieldCriterion mergeConditions(List<FieldCriterion> criterions) { if (CollectionUtils.isEmpty(criterions)) { return null; } StringBuilder builder = new StringBuilder(); for (FieldCriterion criterion : criterions) { builder.append(criterion.getValue()); builder.append(" "); } return new FieldCriterion(criterions.get(0).getField(), builder.toString().trim(), criterions.get(0).getOperator()); }
@Override protected SearchCriterion fieldCriterionHandler(FieldCriterion criterion, SearchScheme scheme, SearchCriterionTransformerHint hint) { if (scheme.getMultipleFields().containsKey(criterion.getField())) { return expandMultipleField(criterion, scheme.getMultipleFields().get(criterion.getField())); } return criterion; }
@Override protected SearchCriterion fieldCriterionHandler(FieldCriterion criterion, SearchScheme scheme, SearchCriterionTransformerHint hint) { if (scheme.getSpecialFieldTypes().containsKey(criterion.getField())) { String specialFieldType = scheme.getSpecialFieldTypes().get(criterion.getField()); if (specialFieldsTransformers.containsKey(specialFieldType)) { return specialFieldsTransformers.get(specialFieldType).transformFieldCriterion(criterion, hint); } } return criterion; }
public static String extractFieldHash(SearchCriterion criterion) { if (criterion instanceof FieldCriterion) { return ((FieldCriterion) criterion).getField() + criterion.getOperator().getName(); } else if (criterion instanceof FieldRangeCriterion) { return ((FieldRangeCriterion) criterion).getField(); } else if (criterion instanceof BooleanCriterion) { return "boolean" + extractFieldHash(((BooleanCriterion) criterion).getCriteria().get(0)); } else { return StringUtils.EMPTY; } }
@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; }
if (subcriterion instanceof FieldCriterion) { FieldCriterion fieldSubcriterion = (FieldCriterion)subcriterion; if (scheme.getMultipleFields().containsKey(fieldSubcriterion.getField())) { FieldCriterion multipleField = (FieldCriterion)subcriterion; BooleanCriterion expandedCondition = expandMultipleField(fieldCriterion, scheme.getMultipleFields().get(fieldCriterion.getField())); if (fieldCriterion.getOperator() == SearchOperator.NOT) { for (SearchCriterion singleExpandedCondition : expandedCondition.getCriteria()) {
@Override protected SearchCriterion fieldCriterionHandler(FieldCriterion criterion, SearchScheme scheme, SearchCriterionTransformerHint hint) { if (!isFieldUsageAllowed(criterion.getField(), scheme)) { hint.addError(new SearchCriterionError(FieldErrorType.INVALID_FIELD, new Object[] { criterion.getField() })); return new BooleanCriterion(); } if (StringUtils.isBlank(criterion.getValue())) { hint.addError(new SearchCriterionError(FieldErrorType.EMPTY_VALUE, null)); return new BooleanCriterion(); } if (criterion.getValue().length() > CRITERION_VALUE_MAX_LENGTH) { hint.addError(new SearchCriterionError(FieldErrorType.TO_LONG_VALUE, new Object[] { CRITERION_VALUE_MAX_LENGTH })); return new BooleanCriterion(); } SearchCriterionTypeValidator additionalValidator = getValidator(criterion.getField(), scheme); if (additionalValidator != null && !additionalValidator.validateFieldCriterion(criterion, hint)) { return new BooleanCriterion(); } return criterion; }
@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; } }
private static String fieldQueryDefault(final String value, final FieldCriterion criterion, final boolean allowLuceneSyntax) { String formattedValue = value; if (allowLuceneSyntax) { formattedValue = Formatter.escapeSpecialSymbolsExceptWildcards(formattedValue); } else { formattedValue = Formatter.escapeSpecialSymbols(formattedValue); } if (SearchOperator.AND.equals(criterion.getParserOperator())) { formattedValue = Formatter.forceMustOperator(formattedValue); } return createFieldQuery(criterion.getField(), formattedValue); }
public void translateSearchCriterionToFormField(SearchCriterion criterion, List<AdvancedFormFieldCondition> advancedForm, BooleanCriterion parent, SearchScheme scheme) { if (criterion instanceof BooleanCriterion) { BooleanCriterion bc = (BooleanCriterion)criterion; boolean firstChild = true; for (SearchCriterion subcriterion : bc.getCriteria()) { translateSearchCriterionToFormField(subcriterion, advancedForm, bc, scheme); if (firstChild && parent != null && bc.getOperator() == SearchOperator.OR) { advancedForm.get(advancedForm.size()-1).setOperator(AdvancedFormFieldCondition.OR_OPERATOR); } else if (firstChild && parent != null) { advancedForm.get(advancedForm.size()-1).setOperator(AdvancedFormFieldCondition.AND_OPERATOR); } firstChild = false; } } else if (criterion instanceof FieldCriterion) { FieldCriterion fieldCriterion = (FieldCriterion)criterion; String presentationFieldName = getPresentationFieldName(scheme, fieldCriterion.getField()); advancedForm.add(new AdvancedFormFieldCondition(translateSearchOperator(fieldCriterion.getOperator(), parent), presentationFieldName, fieldCriterion.getValue())); } else if (criterion instanceof FieldRangeCriterion) { FieldRangeCriterion fieldRangeCriterion = (FieldRangeCriterion)criterion; String presentationFieldName = getPresentationFieldName(scheme, fieldRangeCriterion.getField()); advancedForm.add(new AdvancedFormFieldCondition(translateSearchOperator(fieldRangeCriterion.getOperator(), parent), presentationFieldName, new String[] {fieldRangeCriterion.getFrom(), fieldRangeCriterion.getTo()})); } }
final boolean isExactSearch = criterion.getField().startsWith(SolrConstant.FIELD_EXACTSEARCH_PREFIX); final String name = isExactSearch?criterion.getField().substring(SolrConstant.FIELD_EXACTSEARCH_PREFIX.length()):criterion.getField(); final Metadata metadata = schema.getMetadata(name); final Long span = metadata != null ? metadata.getNumberValue(Property.SPAN) : null;
public SearchCriterion transformFieldCriterion(FieldCriterion criterion, SearchCriterionTransformerHint hint) { String dateString = criterion.getValue(); FieldRangeCriterion dateRangeCriterion = new FieldRangeCriterion(criterion.getField()); dateRangeCriterion.setOperator(criterion.getOperator()); dateRangeCriterion.setFrom(appendMissingDateFormat(dateString, false)); dateRangeCriterion.setTo(appendMissingDateFormat(dateString, true)); return dateRangeCriterion; }
private static String fieldQueryTokenized(final FieldCriterion criterion, final String value, final boolean allowLuceneSyntax) { boolean usesLuceneOperators = false; String formattedValue = value; if (allowLuceneSyntax) { usesLuceneOperators = Formatter.containsSignificantLuceneSyntax(formattedValue); formattedValue = Formatter.escapeSpecialSymbolsExceptWildcardsAndOperators(formattedValue); } else { formattedValue = Formatter.escapeSpecialSymbols(formattedValue); } formattedValue = StringUtils.trimWhitespace(formattedValue); if (!usesLuceneOperators && SearchOperator.AND.equals(criterion.getParserOperator())) { formattedValue = Formatter.forceMustOperator(formattedValue); } return createFieldQuery(criterion.getField(), formattedValue); }
case FIELD: final FieldCriterion fieldCriterion = (FieldCriterion) criterion; criterionQueryType = detectQueryType(fieldCriterion.getField(), fieldCriterion.getValue(), schema); break;