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

时间:2019-04-18 16:11:06

标签: solr edismax

我只想将块连接查询和主查询与edismax-parser结合起来,因为我对solr <7.2做

berlin OR _query_:"{!parent which=type:book}page_content:berlin"

但是edismax不再是用于此目的的默认解析器(https://issues.apache.org/jira/browse/SOLR-11501

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

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>

有人有同样的问题吗?

非常感谢!

1 个答案:

答案 0 :(得分:0)

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

希望此行为可以通过uf参数进行管理。

  

uf :指定允许最终用户显式查询和切换是否嵌入的Solr查询是哪些架构字段   支持的。此参数支持通配符。必须有多个字段   用空格隔开。

     

默认值是允许所有字段,并且不允许嵌入的Solr查询,   等效于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参数中的逗号分隔列表,但是预期的分隔符肯定是空格。

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