others - 如何序列化Lucene查询或者将查询转换为字符串和返回到查询

  显示原文与译文双语对照的内容

使用 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在一个单独的服务器上运行,它期望查询对象执行搜索。 由于查询或者BooleanQuery不可序列化,我尝试将上字符串查询转换为查询/布尔值对象。

我发现将 BooleanQuery.toString() 转换为字符串并回到 BooleanQuery to,但是无法找到任何可以转换字符串查询的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);

...