【问题标题】:SolrNet ANDs and ORs with SolrQuery objects and eDisMaxSolrNet ANDs 和 ORs 与 SolrQuery 对象和 eDisMax
【发布时间】:2014-02-06 18:20:50
【问题描述】:

我一直在手动构建 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_ 字段。)

ANDs and ORs 的 API 有很好的文档记录,但我需要将 AND 和 OR 分组以处理上述情况——例如 (a OR b) AND (c OR d)。以前有人用 SolrNet 做过这个吗?谢谢!

更新:我发现了一个我认为将 AND 和 OR 与括号 here 结合在一起的示例。不幸的是,这假设我事先知道查询的结构。相反,我将根据用户输入动态创建 SolrNet 查询,因此我无法对 (a) && (b || c) 之类的模式进行硬编码。

【问题讨论】:

标签: solrnet


【解决方案1】:

以下代码应为您提供所需的内容:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多