在Solr中,如何将edismax与过滤查询一起使用(但没有默认字段)?

时间:2015-11-20 15:57:27

标签: solr edismax

我有一个启用了分面的edismax查询。我没有指定默认字段(既不在select子句中也不在solrconfig.xml中),因为我只想搜索'qf'参数中指定的字段。 (我的印象是,如果我执行指定默认字段,那么该字段也会被考虑在内。)

以下是查询:

/select?q=david&defType=edismax&qf=firstname^1+lastname^10&facet=true&facet.field=organization

到目前为止,一切都按预期工作:我得到了一些结果,并且还有一些来自分面搜索的结果,例如

  • “UZ Leuven”(18)
  • “OLV Aalst”(8)
  • ...

当我现在点击其中一个组织时,我想只搜索属于该组织的文档集,因此使用过滤器查询。但是,当我添加这样的'filterQuery'(fq)时,Solr抱怨

  

查询中未指定字段名称,并且未通过“df”指定默认值   PARAM。

这是否意味着我必须添加某种“全能”默认字段?但这似乎不符合逻辑,因为所有搜索字段都已在'qf'中指定?

这是我的疑问:

/select?q=david&defType=edismax&qf=firstname^1+lastname^10&fq=organization:UZ+Leuven

以下是查询的输出:

{
  responseHeader: {
    status: 400,
    QTime: 1,
    params: {
      q: "david",
      qf: "firstname^1 lastname^10",
      wt: "json",
      fq: "organization:UZ Leuven",
      defType: "edismax"
    }
  },
  error: {
    msg: "no field name specified in query and no default specified via 'df' param",
    code: 400
  }
}

1 个答案:

答案 0 :(得分:1)

您可能想要organization:"UZ Leuven",因为它抱怨Leuven缺少字段名称。 fq参数的标准查询语法是lucene语法。

如果您想对fq参数使用edismax / dismax查询语法,则必须通过LocalParams告诉Solr to use the edismax parser

fq={!type=edismax qf=$fqqf}organization:UZ Leuven&fqqf=field1 field2 field3

或可能

fq={!type=edismax qf='field1 field2 field3'}organization:UZ Leuven