3

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

这是查询:

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

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

  • “乌兹鲁汶” (18)
  • “OLV 阿尔斯特” (8)
  • ...

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

查询中没有指定字段名称,也没有通过“df”参数指定默认值。

那么这是否意味着我必须添加某种“包罗万象”的默认字段?但这似乎不合逻辑,因为所有搜索字段都已在“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
  }
}
4

1 回答 1

1

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

如果要对参数使用 edismax/dismax 查询语法,则必须通过 LocalParamsfq告诉 Solr使用 edismax 解析器:

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

或者可能

fq={!type=edismax qf='field1 field2 field3'}organization:UZ Leuven
于 2015-11-20T18:24:10.790 回答