private Query convertTextCriterion()

in mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/query/CriterionConverter.java [224:315]


    private Query convertTextCriterion(SearchQuery.TextCriterion textCriterion) {
        switch (textCriterion.getType()) {
        case BODY:
            if (useQueryStringQuery) {
                return new SimpleQueryStringQuery.Builder()
                    .fields(ImmutableList.of(JsonMessageConstants.TEXT_BODY, JsonMessageConstants.HTML_BODY))
                    .query(textCriterion.getOperator().getValue())
                    .build().toQuery();
            } else {
                return new BoolQuery.Builder()
                    .should(new MatchQuery.Builder()
                        .field(JsonMessageConstants.TEXT_BODY)
                        .query(new FieldValue.Builder().stringValue(textCriterion.getOperator().getValue()).build())
                        .fuzziness(textFuzzinessSearchValue)
                        .operator(Operator.And)
                        .build()
                        .toQuery())
                    .should(new MatchQuery.Builder()
                        .field(JsonMessageConstants.HTML_BODY)
                        .query(new FieldValue.Builder().stringValue(textCriterion.getOperator().getValue()).build())
                        .fuzziness(textFuzzinessSearchValue)
                        .operator(Operator.And)
                        .build()
                        .toQuery())
                    .build()
                    .toQuery();
            }
        case FULL:
            if (useQueryStringQuery) {
                return new SimpleQueryStringQuery.Builder()
                    .fields(ImmutableList.of(JsonMessageConstants.TEXT_BODY, JsonMessageConstants.HTML_BODY, JsonMessageConstants.ATTACHMENTS + "." + JsonMessageConstants.Attachment.TEXT_CONTENT))
                    .query(textCriterion.getOperator().getValue())
                    .build().toQuery();
            } else {
                return new BoolQuery.Builder()
                    .should(new MatchQuery.Builder()
                        .field(JsonMessageConstants.TEXT_BODY)
                        .query(new FieldValue.Builder().stringValue(textCriterion.getOperator().getValue()).build())
                        .fuzziness(textFuzzinessSearchValue)
                        .operator(Operator.And)
                        .build()
                        .toQuery())
                    .should(new MatchQuery.Builder()
                        .field(JsonMessageConstants.HTML_BODY)
                        .query(new FieldValue.Builder().stringValue(textCriterion.getOperator().getValue()).build())
                        .fuzziness(textFuzzinessSearchValue)
                        .operator(Operator.And)
                        .build()
                        .toQuery())
                    .should(new MatchQuery.Builder()
                        .field(JsonMessageConstants.ATTACHMENTS + "." + JsonMessageConstants.Attachment.TEXT_CONTENT)
                        .query(new FieldValue.Builder().stringValue(textCriterion.getOperator().getValue()).build())
                        .fuzziness(textFuzzinessSearchValue)
                        .operator(Operator.And)
                        .build()
                        .toQuery())
                    .build()
                    .toQuery();
            }
        case ATTACHMENTS:
            if (useQueryStringQuery) {
                return new SimpleQueryStringQuery.Builder()
                    .fields(ImmutableList.of(JsonMessageConstants.ATTACHMENTS + "." + JsonMessageConstants.Attachment.TEXT_CONTENT))
                    .query(textCriterion.getOperator().getValue())
                    .build().toQuery();
            } else {
                return new BoolQuery.Builder()
                    .should(new MatchQuery.Builder()
                        .field(JsonMessageConstants.ATTACHMENTS + "." + JsonMessageConstants.Attachment.TEXT_CONTENT)
                        .query(new FieldValue.Builder().stringValue(textCriterion.getOperator().getValue()).build())
                        .fuzziness(textFuzzinessSearchValue)
                        .operator(Operator.And)
                        .build()
                        .toQuery())
                    .build()
                    .toQuery();
            }
        case ATTACHMENT_FILE_NAME:
            return new BoolQuery.Builder()
                .should(new MatchQuery.Builder()
                    .field(JsonMessageConstants.ATTACHMENTS + "." + JsonMessageConstants.Attachment.FILENAME)
                    .query(new FieldValue.Builder().stringValue(textCriterion.getOperator().getValue()).build())
                    .fuzziness(textFuzzinessSearchValue)
                    .operator(Operator.And)
                    .build()
                    .toQuery())
                .build()
                .toQuery();
        default:
            throw new RuntimeException("Unknown SCOPE for text criterion");
        }
    }