Search in sources :

Example 1 with FIELD_NOT_ANALYZED

use of org.molgenis.data.elasticsearch.FieldConstants.FIELD_NOT_ANALYZED in project molgenis by molgenis.

the class QueryGenerator method createQueryClauseIn.

private QueryBuilder createQueryClauseIn(QueryRule queryRule, EntityType entityType) {
    List<Attribute> attributePath = getAttributePath(queryRule.getField(), entityType);
    Attribute attr = attributePath.get(attributePath.size() - 1);
    Object queryRuleValue = queryRule.getValue();
    if (queryRuleValue == null) {
        throw new MolgenisQueryException("Query value cannot be null");
    }
    if (!(queryRuleValue instanceof Iterable<?>)) {
        throw new MolgenisQueryException("Query value must be a Iterable instead of [" + queryRuleValue.getClass().getSimpleName() + "]");
    }
    Object[] queryValues = StreamSupport.stream(((Iterable<?>) queryRuleValue).spliterator(), false).map(aQueryRuleValue -> getQueryValue(attr, aQueryRuleValue)).toArray();
    QueryBuilder queryBuilder;
    String fieldName = getQueryFieldName(attr);
    AttributeType dataType = attr.getDataType();
    switch(dataType) {
        case BOOL:
        case DATE:
        case DATE_TIME:
        case DECIMAL:
        case EMAIL:
        case ENUM:
        case HTML:
        case HYPERLINK:
        case INT:
        case LONG:
        case SCRIPT:
        case STRING:
        case TEXT:
            if (useNotAnalyzedField(attr)) {
                fieldName = fieldName + '.' + FIELD_NOT_ANALYZED;
            }
            // note: inFilter expects array, not iterable
            queryBuilder = QueryBuilders.termsQuery(fieldName, queryValues);
            queryBuilder = nestedQueryBuilder(attributePath, queryBuilder);
            break;
        case CATEGORICAL:
        case CATEGORICAL_MREF:
        case MREF:
        case XREF:
        case FILE:
        case ONE_TO_MANY:
            if (attributePath.size() > 1) {
                throw new UnsupportedOperationException("Can not filter on references deeper than 1.");
            }
            Attribute refIdAttr = attr.getRefEntity().getIdAttribute();
            List<Attribute> refAttributePath = concat(attributePath.stream(), of(refIdAttr)).collect(toList());
            String indexFieldName = getQueryFieldName(refAttributePath);
            if (useNotAnalyzedField(refIdAttr)) {
                indexFieldName = indexFieldName + '.' + FIELD_NOT_ANALYZED;
            }
            queryBuilder = QueryBuilders.termsQuery(indexFieldName, queryValues);
            queryBuilder = QueryBuilders.nestedQuery(fieldName, queryBuilder, ScoreMode.Avg);
            break;
        case COMPOUND:
            throw new MolgenisQueryException("Illegal data type [" + dataType + "] for operator [" + QueryRule.Operator.IN + "]");
        default:
            throw new UnexpectedEnumException(dataType);
    }
    return QueryBuilders.constantScoreQuery(queryBuilder);
}
Also used : AttributeType(org.molgenis.data.meta.AttributeType) org.molgenis.data(org.molgenis.data) Iterator(java.util.Iterator) Stream.of(java.util.stream.Stream.of) LIKE(org.molgenis.data.QueryRule.Operator.LIKE) ScoreMode(org.apache.lucene.search.join.ScoreMode) Instant(java.time.Instant) Attribute(org.molgenis.data.meta.model.Attribute) EntityType(org.molgenis.data.meta.model.EntityType) String.format(java.lang.String.format) Collectors.joining(java.util.stream.Collectors.joining) ArrayList(java.util.ArrayList) UnexpectedEnumException(org.molgenis.util.UnexpectedEnumException) FIELD_NOT_ANALYZED(org.molgenis.data.elasticsearch.FieldConstants.FIELD_NOT_ANALYZED) Component(org.springframework.stereotype.Component) List(java.util.List) Collectors.toList(java.util.stream.Collectors.toList) org.elasticsearch.index.query(org.elasticsearch.index.query) LocalDate(java.time.LocalDate) Objects.requireNonNull(java.util.Objects.requireNonNull) StreamSupport(java.util.stream.StreamSupport) Stream.concat(java.util.stream.Stream.concat) DEFAULT_ANALYZER(org.molgenis.data.elasticsearch.FieldConstants.DEFAULT_ANALYZER) UnexpectedEnumException(org.molgenis.util.UnexpectedEnumException) Attribute(org.molgenis.data.meta.model.Attribute) AttributeType(org.molgenis.data.meta.AttributeType)

Aggregations

String.format (java.lang.String.format)1 Instant (java.time.Instant)1 LocalDate (java.time.LocalDate)1 ArrayList (java.util.ArrayList)1 Iterator (java.util.Iterator)1 List (java.util.List)1 Objects.requireNonNull (java.util.Objects.requireNonNull)1 Collectors.joining (java.util.stream.Collectors.joining)1 Collectors.toList (java.util.stream.Collectors.toList)1 Stream.concat (java.util.stream.Stream.concat)1 Stream.of (java.util.stream.Stream.of)1 StreamSupport (java.util.stream.StreamSupport)1 ScoreMode (org.apache.lucene.search.join.ScoreMode)1 org.elasticsearch.index.query (org.elasticsearch.index.query)1 org.molgenis.data (org.molgenis.data)1 LIKE (org.molgenis.data.QueryRule.Operator.LIKE)1 DEFAULT_ANALYZER (org.molgenis.data.elasticsearch.FieldConstants.DEFAULT_ANALYZER)1 FIELD_NOT_ANALYZED (org.molgenis.data.elasticsearch.FieldConstants.FIELD_NOT_ANALYZED)1 AttributeType (org.molgenis.data.meta.AttributeType)1 Attribute (org.molgenis.data.meta.model.Attribute)1