如何在 Java 中使用 Solr 以编程方式编写 "OR" 查询
How to write "OR" query programmatically with Solr in Java
我在 Java 中遇到 Solr 问题。我想以编程方式编写查询。
我在 8.3.1 版本中使用 Solr、Lucene 和 SolrJ
这是我想做的例子。
QueryBuilder queryBuilder = new QueryBuilder(new WhitespaceAnalyzer());
BooleanQuery booleanQuery = new BooleanQuery.Builder()
.add(queryBuilder.createBooleanQuery("testField1", "foobar"), BooleanClause.Occur.SHOULD)
.add(queryBuilder.createBooleanQuery("testField2", "barfoo"), BooleanClause.Occur.SHOULD)
.add(queryBuilder.createMinShouldMatchQuery("minField", "foobar2", 0.5f), BooleanClause.Occur.SHOULD)
.add(new TermRangeQuery("testField", new BytesRef("lower"), new BytesRef("upper"), true, true), BooleanClause.Occur.SHOULD)
.add(queryBuilder.createBooleanQuery("empty", "fooBarEmpty"), BooleanClause.Occur.SHOULD)
.build();
在 Solr 中有一些查询,例如“... OR ...”。我想知道如何以编程方式编写这些 "OR" 查询。我在 google 上搜索了很多,但一无所获。也许你们中的一些人知道我想做什么,你可以帮助我。
干杯,
杰瑞
您可以将自己的查询创建为字符串,然后添加 solrj
、filterquery
例如:
假设您必须搜索 city
abc 或 xyz 并请求:
{ "filterQuery": {"city":["abc","xyz"] } }
因此,您的查询如下:
SolrQuery query = new SolrQuery();
if (req.getFilterQuery() != null && !req.getFilterQuery().isEmpty()) {
final StringBuilder chars = new StringBuilder();
for (String key : req.getFilterQuery().keySet()) {
chars.append(key + ":" + "(");
for (String val : req.getFilterQuery().get(key)) {
chars.append("\"" + val + "\"" + " ");
}
chars.append(")");
chars.append(" OR ");
}
chars.delete(chars.length() - 4, chars.length());
query.addFilterQuery(chars.toString());
}
QueryResponse response = solrClient.query(query, METHOD.POST);
希望这可以帮助您找到您的数据。
我在 Java 中遇到 Solr 问题。我想以编程方式编写查询。
我在 8.3.1 版本中使用 Solr、Lucene 和 SolrJ
这是我想做的例子。
QueryBuilder queryBuilder = new QueryBuilder(new WhitespaceAnalyzer());
BooleanQuery booleanQuery = new BooleanQuery.Builder()
.add(queryBuilder.createBooleanQuery("testField1", "foobar"), BooleanClause.Occur.SHOULD)
.add(queryBuilder.createBooleanQuery("testField2", "barfoo"), BooleanClause.Occur.SHOULD)
.add(queryBuilder.createMinShouldMatchQuery("minField", "foobar2", 0.5f), BooleanClause.Occur.SHOULD)
.add(new TermRangeQuery("testField", new BytesRef("lower"), new BytesRef("upper"), true, true), BooleanClause.Occur.SHOULD)
.add(queryBuilder.createBooleanQuery("empty", "fooBarEmpty"), BooleanClause.Occur.SHOULD)
.build();
在 Solr 中有一些查询,例如“... OR ...”。我想知道如何以编程方式编写这些 "OR" 查询。我在 google 上搜索了很多,但一无所获。也许你们中的一些人知道我想做什么,你可以帮助我。
干杯, 杰瑞
您可以将自己的查询创建为字符串,然后添加 solrj
、filterquery
例如:
假设您必须搜索 city
abc 或 xyz 并请求:
{ "filterQuery": {"city":["abc","xyz"] } }
因此,您的查询如下:
SolrQuery query = new SolrQuery();
if (req.getFilterQuery() != null && !req.getFilterQuery().isEmpty()) {
final StringBuilder chars = new StringBuilder();
for (String key : req.getFilterQuery().keySet()) {
chars.append(key + ":" + "(");
for (String val : req.getFilterQuery().get(key)) {
chars.append("\"" + val + "\"" + " ");
}
chars.append(")");
chars.append(" OR ");
}
chars.delete(chars.length() - 4, chars.length());
query.addFilterQuery(chars.toString());
}
QueryResponse response = solrClient.query(query, METHOD.POST);
希望这可以帮助您找到您的数据。