@Override public String getDialectFulltextQuery(String query) { query = query.replace("*", "%"); // reserved, words with it not quoted FulltextQuery ft = FulltextQueryAnalyzer.analyzeFulltextQuery(query); if (ft == null) { return "DONTMATCHANYTHINGFOREMPTYQUERY"; } return FulltextQueryAnalyzer.translateFulltext(ft, "OR", "AND", "NOT", "{", "}", CHARS_RESERVED, "", "", true); }
/** * Analyzes a fulltext query into a generic datastructure that can be used for each specific database. * <p> * List of terms containing only negative words are suppressed. Otherwise negative words are put at the end of the * lists of terms. */ public static FulltextQuery analyzeFulltextQuery(String query) { return new FulltextQueryAnalyzer().analyze(query); }
/** * Translate fulltext into a common pattern used by many servers. */ public static String translateFulltext(FulltextQuery ft, String or, String and, String andNot, String wordStart, String wordEnd, Set<Character> wordCharsReserved, String phraseStart, String phraseEnd, boolean quotePhraseWords) { StringBuilder buf = new StringBuilder(); translate(ft, buf, or, and, andNot, wordStart, wordEnd, wordCharsReserved, phraseStart, phraseEnd, quotePhraseWords); return buf.toString(); }
query = query.replace(" & ", " "); // PostgreSQL compatibility BBB query = PREFIX_PATTERN.matcher(query).replaceAll(PREFIX_REPL); FulltextQuery ft = FulltextQueryAnalyzer.analyzeFulltextQuery(query); if (ft == null) { return ""; // won't match anything if (!FulltextQueryAnalyzer.hasPhrase(ft)) { return FulltextQueryAnalyzer.translateFulltext(ft, "|", "&", "& !", ""); String ftsql = FulltextQueryAnalyzer.translateFulltext(broken, "|", "&", "& !", "");
public static String getMongoDBFulltextQuery(String query) { FulltextQuery ft = FulltextQueryAnalyzer.analyzeFulltextQuery(query); if (ft == null) { return null; } // translate into MongoDB syntax return translateFulltext(ft, false); }
public static boolean hasPhrase(FulltextQuery ft) { if (ft.op == Op.AND || ft.op == Op.OR) { for (FulltextQuery term : ft.terms) { if (hasPhrase(term)) { return true; } } return false; } else { return ft.isPhrase(); } }
translate(term, buf, or, and, andNot, wordStart, wordEnd, wordCharsReserved, phraseStart, phraseEnd, quotePhraseWords); appendWord(w, buf, wordStart, wordEnd, wordCharsReserved); appendWord(word, buf, wordStart, wordEnd, wordCharsReserved);
@Override public String getDialectFulltextQuery(String query) { query = query.replace("%", "*"); FulltextQuery ft = FulltextQueryAnalyzer.analyzeFulltextQuery(query); if (ft == null || ft.op == Op.NOTWORD) { return "DONTMATCHANYTHINGFOREMPTYQUERY"; } StringBuilder buf = new StringBuilder(); translateForMySQL(ft, null, buf); return buf.toString(); }
@Override public String getDialectFulltextQuery(String query) { query = query.replace("%", "*"); FulltextQuery ft = FulltextQueryAnalyzer.analyzeFulltextQuery(query); if (ft == null) { return "DONTMATCHANYTHINGFOREMPTYQUERY"; } return FulltextQueryAnalyzer.translateFulltext(ft, "OR", "AND", "NOT", "\""); }
/** * Translate fulltext into a common pattern used by many servers. */ public static String translateFulltext(FulltextQuery ft, String or, String and, String andNot, String phraseQuote) { StringBuilder buf = new StringBuilder(); translate(ft, buf, or, and, andNot, "", "", Collections.<Character> emptySet(), phraseQuote, phraseQuote, false); return buf.toString(); }
@Override public String getDialectFulltextQuery(String query) { query = query.replace("%", "*"); FulltextQuery ft = FulltextQueryAnalyzer.analyzeFulltextQuery(query); if (ft == null) { return "DONTMATCHANYTHINGFOREMPTYQUERY"; } return FulltextQueryAnalyzer.translateFulltext(ft, "OR", "AND", "AND NOT", "\"", "\"", Collections.<Character> emptySet(), "\"", "\"", false); }