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");
}
}