/** * Get tomorrow's date * * @return */ private static String tomorrow() { return DATEFORMAT.format(addOneDay(new Date())); }
/** * Builds a query with the provided input terms over the given fields * * @param fields * @param input * @return the query * @throws InvalidQueryException */ public static String buildLuceneQuery(List<String> fields, String input) throws InvalidQueryException { StringBuilder result = new StringBuilder(); input = replaceNonAlphaNummeric(input); List<String> terms = split(input); if (fields!=null && !fields.isEmpty()) { terms = attachFields(fields, terms); } terms = assembleAndClauses(terms); for (String term : terms) { if (result.length() > 0) result.append(" "); result.append(term); } return result.toString().trim(); }
StringBuilder result = new StringBuilder(); String basicQuery = buildLuceneQuery(fields, input); String dateFrom = beginOfTime(); String dateTo = tomorrow(); if (from != null) dateFrom = DATEFORMAT.format(from); if (to != null) { dateTo = DATEFORMAT.format(addOneDay(to));
this.queryStr = LuceneQueryBuilder.buildLuceneQuery(fieldsArray, dFrom, dTo, dateType, query); if (this.queryStr.isEmpty()) { "Invalid query: "+e1.getMessage());
throw new InvalidQueryException( "AND expression must be followed by a search term!"); else result.add(concatenateAndTerms(andTerms)); andTerms.clear(); result.add(term); else throw new InvalidQueryException( "AND expression must be followed by a search term!"); result.add(concatenateAndTerms(andTerms));
/** * Splits input string by whitespaces, taking quotes into account * * @param input * @return */ private static List<String> split(String input) { final String regex = "\"([^\"]*)\"|(\\S+)"; List<String> result = new ArrayList<String>(); Matcher m = Pattern.compile(regex).matcher(input); while (m.find()) { String s = m.group(1); if (s != null) { // don't touch quoted terms result.add("\"" + s.trim() + "\""); } else { s = m.group(2); if (!isWildcardOnly(s)) result.add(s.trim()); } } return result; }