我正在使用 Lucene 4.7.2 版本。
我已将一些信息编入索引并创建了一个 UI 以在该界面上进行查询。我根据用户输入创建了一个 BooleanQuery,
例子:
BooleanQuery bq = new BooleanQuery();
NumericRangeQuery<Integer> nrq = NumericRangeQuery.newIntRange("age", 20, 30, true, true);
bq.add(nrq, BooleanClause.Occur.MUST);
Term term = new Term("name", "einstein");
TermQuery termQuery = new TermQuery(term);
bq.add(termQuery, BooleanClause.Occur.MUST);
System.out.println(bq.toString());
这打印,
+age[20 TO 30] AND name:einstein
Lucene 在单独的服务器上运行,它希望 Query 对象执行搜索。由于 Query 或 BooleanQuery 不可序列化,我正在尝试转换上面的 String 查询并将其转换为 Query/Boolean 对象。
我找到了 this idea of converting BooleanQuery.toString() to String and back to BooleanQuery但我找不到任何 API 来将字符串查询转换为查询类型。
最佳答案
正如我在链接问题的评论中所解释的,只需将此字符串反馈给 QueryParser
,您应该会得到相同的 Query
对象。
import org.apache.lucene.queryparser.classic.QueryParser;
...
String queryString = "+age[20 TO 30] AND name:einstein";
Query query = new QueryParser(Version.LUCENE_4_7, null, <yourAnalyzer>)
.parse(queryString);
关于java - 如何序列化 Lucene 查询或将查询转换为字符串并返回查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25841494/