Solr 7.6.0:如何在一个查询中组合不同的 QueryParser?

Solr 7.6.0: How to combine different QueryParser in one query?

我只想将块连接查询和 main-query 与 edismax-parser 结合起来,就像我为 solr < 7.2

所做的那样
berlin OR _query_:"{!parent which=type:book}page_content:berlin"

但是 edismax 不能再成为这个目的的 default-Parser(s. https://issues.apache.org/jira/browse/SOLR-11501)

因此它与 lucene-QueryParser 一起用于查询 parents:

q={!parent which="type:book"}{!edismax qf='page_content' v='berlin'}

它仍然适用于添加像

这样的主查询
q=title:berlin* AND {!parent which="type:book"}{!edismax qf='page_content' v='berlin'}

但是当我尝试

q={!edismax qf='title' v='berlin'} OR {!parent which="type:book"}{!edismax qf='page_content' v='berlin'}

仅评估查询的第一部分。

我的文档是:

<add>
  <doc>
    <field name="id">1</field>
    <field name="type">book</field>
    <field name="title">Book about Berlin</field>
    <field name="pages">
    <doc>
      <field name="id">11</field>
      <field name="type">page</field>
      <field name="page_content">berlin in winter</field>
    </doc>
    <doc>
      <field name="id">12</field>
      <field name="type">page</field>
      <field name="page_content">berlin in spring</field>
    </doc>
    <doc>
      <field name="id">13</field>
      <field name="type">page</field>
      <field name="page_content">berlin in summer</field>
    </doc>
  </field>
 </doc>
 <doc>
    <field name="id">2</field>
    <field name="type">book</field>
    <field name="title">Big book about Tokio</field>
    <field name="pages">
    <doc>
      <field name="id">21</field>
      <field name="type">page</field>
      <field name="page_content">tokio in winter</field>
    </doc>
    <doc>
      <field name="id">22</field>
      <field name="type">page</field>
      <field name="page_content">tokio in spring</field>
    </doc>
    <doc>
      <field name="id">23</field>
      <field name="type">page</field>
      <field name="page_content">tokio in summer</field>
    </doc>
  </field>
 </doc>
</add>

有人遇到同样的问题吗?

非常感谢!

这是因为,从 Solr 7.3 开始,关于 edismax 可搜索字段的默认设置实际上 禁止 使用嵌入式查询。

希望可以使用 uf 参数来管理此行为。

uf : Specifies which schema fields the end user is allowed to explicitly query and to toggle whether embedded Solr queries are supported. This parameter supports wildcards. Multiple fields must be separated by a space.

The default is to allow all fields and no embedded Solr queries, equivalent to uf=* -_query_.

设置 uf=* _query_ 以允许嵌入查询。

我在 Solr 7.7.1 上测试过它,它可以工作,但我必须 用双引号将嵌入式查询括起来,否则 整个 查询失败 返回 0 结果,恕不另行通知。

这个查询应该有效:

defType=edismax&uf=* _query_&q=title:berlin* OR "{!parent which="type:book"}page_content:berlin"

注意:Solr < 7.3 的文档中有示例提到 uf 参数中的逗号分隔列表,但预期的分隔符肯定是 space.

对于那些不使用 edismax 的用户,您必须设置 luceneMatchVersion=7.1.0 才能完全向后兼容。