SolrNet与SolrQuery对象和eDisMax的AND和OR

时间:2014-02-06 18:20:50

标签: solrnet

我一直在手工构建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)。

1 个答案:

答案 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");