java - 如何序列化 Lucene 查询或将查询转换为字符串并返回查询

标签 java solr lucene elasticsearch

我正在使用 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/

相关文章:

使用现有字段进行 solr 排名

c# - Lucene.Net IndexWriter 无法加载文件错误?

java - DeepLearning4J NoSuchMethodError

java - 如何获得两个列表的所有可能匹配项?

syntax - 如何在Solr中进行IN查询?

java - 使用 boolean 数组进行碰撞检测?

solr - Solr:无法搜索包含字符的数字

java - Lucene 索引中的文档和字段实例重用

java tcp服务器到多个连接

Java 让代码等待 Swing-Timer 完成工作