我有一个要求,我想修改字符串格式的lucene查询值。 我将lucene查询作为来自用户界面的输入并将其传递给弹性。
例如
输入:姓名:“abc”和年龄:26
预期输出:名称:“abcmodified”和userage:26
如何在java中解析和修改字符串格式的lucene查询?
答案 0 :(得分:1)
您是否尝试过调查org.apache.lucene.queryparser.classic.QueryParser
?它具有从输入字符串返回Lucene查询对象的功能。例如:
String rawQuery = "name:abc AND age:26";
QueryParser parser = new QueryParser(Version.LUCENE_45, null, new WhitespaceAnalyzer(Version.LUCENE_45));
BooleanQuery query = (BooleanQuery) praser.parse(rawQuery);
query.clauses().get(0).setQuery(new TermQuery(new Term("name", "abcmodified")));
query.clauses().get(1).setQuery(new TermQuery(new Term("userage", "26")));
System.out.println(query);
将打印+name:abcmodified +userage:26
,这基本上就是您想要的。显然,您可以使用基于查询类型遍历查询的递归方法进行更智能的处理(布尔值,前缀,术语,模糊等...)
希望这有帮助!