【问题标题】:In Solr, how to use edismax with filter queries (but without a default field)?在 Solr 中,如何将 edismax 与过滤查询一起使用(但没有默认字段)?
【发布时间】:2015-11-20 15:57:27
【问题描述】:

我有一个启用了 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
  }
}

【问题讨论】:

    标签: solr edismax


    【解决方案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
    

    【讨论】:

    • 但我也想搜索所有“qf”字段,而不仅仅是“fq”参数。你的意思是 'fq' 参数不能和 edismax 一起使用?
    • 在这种情况下,您必须通过 LocalParams 告诉 Solr 您想要使用 edismax 解析器,这应该可以工作。有关两种可能的解决方案,请参阅我的更新答案。
    • 谢谢,我会在星期一测试你的答案。我仍然不确定您的示例中是否使用了过滤器查询。也许对我正在尝试做的事情进行额外说明: fq 参数用于保留某个组织的所有用户(也可以缓存该查询,即它是一个过滤器查询)。然后将通过特定于 edismax 的 'qf' 参数在名字和姓氏上搜索结果集合。这有意义吗(我对 solr 很陌生,也许我遗漏了一些东西)?
    • 我不确定您为什么需要 edismax 查询解析器 - 仅使用 fq=organization:"UZ Leuven" 应该可以满足您对过滤器查询的需求。如果这是您为查询提供的defType,则查询本身仍将使用 edismax 解析器。根据您的描述,使用标准 lucene 语法的常规过滤器查询应该足以限制结果集,而查询本身 (q=) 可以根据需要使用 edismax 查询解析器。
    • 再次感谢!我已经用更多信息更新了这个问题。你看到我做错了什么吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-04
    • 2023-01-04
    • 1970-01-01
    • 1970-01-01
    • 2017-12-08
    相关资源
    最近更新 更多