in mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java [713:748]
private Query createQuery(Criterion criterion, Query inMailboxes, Collection<MessageUid> recentUids) throws MailboxException {
if (criterion instanceof SearchQuery.InternalDateCriterion crit) {
return createInternalDateQuery(crit);
} else if (criterion instanceof SearchQuery.SaveDateCriterion crit) {
return createSaveDateQuery(crit);
} else if (criterion instanceof SearchQuery.SizeCriterion crit) {
return createSizeQuery(crit);
} else if (criterion instanceof SearchQuery.MessageIdCriterion crit) {
return new TermQuery(new Term(MESSAGE_ID_FIELD, crit.getMessageId().serialize()));
} else if (criterion instanceof HeaderCriterion crit) {
return createHeaderQuery(crit);
} else if (criterion instanceof UidCriterion crit) {
return createUidQuery(crit);
} else if (criterion instanceof FlagCriterion crit) {
return createFlagQuery(toString(crit.getFlag()), crit.getOperator().isSet(), inMailboxes, recentUids);
} else if (criterion instanceof AttachmentCriterion crit) {
return createAttachmentQuery(crit.getOperator().isSet());
} else if (criterion instanceof CustomFlagCriterion crit) {
return createFlagQuery(crit.getFlag().toLowerCase(Locale.US), crit.getOperator().isSet(), inMailboxes, recentUids);
} else if (criterion instanceof SearchQuery.TextCriterion crit) {
return createTextQuery(crit);
} else if (criterion instanceof SearchQuery.AllCriterion) {
return createAllQuery();
} else if (criterion instanceof SearchQuery.ConjunctionCriterion crit) {
return createConjunctionQuery(crit, inMailboxes, recentUids);
} else if (criterion instanceof SearchQuery.ModSeqCriterion) {
return createModSeqQuery((SearchQuery.ModSeqCriterion) criterion);
} else if (criterion instanceof SearchQuery.MimeMessageIDCriterion mimeMessageIDCriterion) {
return createHeaderQuery(mimeMessageIDCriterion.asHeaderCriterion());
} else if (criterion instanceof SearchQuery.SubjectCriterion subjectCriterion) {
return createHeaderQuery(subjectCriterion.asHeaderCriterion());
} else if (criterion instanceof SearchQuery.ThreadIdCriterion threadIdCriterion) {
return createTermQuery(THREAD_ID_FIELD, threadIdCriterion.getThreadId().serialize());
}
throw new UnsupportedSearchException();
}