javacc (Java Compiler Compiler)などを使用してパーサーを実装するか、総当たりで文字列を手動で解析することができます。式に出くわすたびに、それをオブジェクトとして表現します。次に、式ツリーを where 句に変換するだけです。
例: 「ハリー・ポッター」は次のようになります。
new AndExp(new FieldContainsExp("NAME", "Harry"), new FieldContainsExp("NAME", "Potter")
また、「publisher:Nature* pages > 100」は次のようになります。
new AndExp(new FieldContainsExp("PUBLISHER", "Nature"), FieldGreaterThan("PAGES", 100))
次に、これらを取得したら、SQL に変換するのは非常に簡単です。
FieldContainsExp.toSQL(StringBuffer sql, Collection<Object> args) {
sql.append(fieldName);
sql.append(" like ");
sql.append("'%?%'");
args.add(value);
}
AndExp.toSQL(StringBuffer sql, Collection<Object> args) {
exp1.toSQL(sql, args);
sql.append(" AND ");
exp2.toSQL(sql, args);
}
残りは想像できます。And 式は、必要なだけネストできます。