我一直在手工构建Solr查询作为字符串并将它们传递给SolrNet。查询可以是AND和OR的复杂组合,如下所示:
_query_:"field1:[1 TO 10] OR
field2:[1 TO 10] OR
field3:[1 TO 10]"
AND
_query_:"field4:(keyword)"
AND
_query_:"field5:(keyword)"
这很好用,但是看看SolrNet的API,我看到有些对象我可以用于每个子句,然后将这些对象拉到一起形成完整的查询。我宁愿用这种方法实现这个,而不是构建和连接字符串。
(我应该提一下,我正在使用eDisMax解析器,它允许我使用_query_
字段,如上所示。)
API ANDs and ORs已有详细记录,但我需要对AND和OR进行分组以处理上述情况 - 例如(a OR b)AND(c OR d)。有没有人在SolrNet之前做过这个?谢谢!
更新:我发现了一个例子,我认为将AND和OR与括号here结合起来。不幸的是,这假设我事先知道查询的结构。相反,我将根据用户输入动态创建SolrNet查询,因此我不能硬编码像(a)&&amp ;; (b || c)。
答案 0 :(得分:2)
以下代码可以为您提供所需内容:
var queryList = new List<ISolrQuery>();
if (condition1)
queryList.Add(new SolrMultipleCriteriaQuery(new List<ISolrQuery>
{
new SolrQueryByRange<decimal>("field1", 1, 10),
new SolrQueryByRange<decimal>("field2", 1, 10),
new SolrQueryByRange<decimal>("field3", 1, 10)
}, "OR"));
if (condition2)
queryList.Add(new SolrQueryByField("field3", keyword));
if (condition3)
queryList.Add(new SolrQueryByField("field4", keyword));
var finalQuery = new SolrMultipleCriteriaQuery(queryList, "AND");