如何在Java中使用Solr以编程方式编写"OR"查询



我在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"查询。我在谷歌上搜索了很多,但一无所获。也许你们中的一些人知道我想做什么,你们可以帮助我。

干杯,Jerry

您可以将自己的查询创建为字符串,然后添加solrjfilterquery

例如:假设您必须搜索cityabcxyz,并请求如下:

{ "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);

希望这能帮助你找到你的数据。

相关内容

最新更新