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

klsxnrf1  于 2023-08-04  发布在  Solr
关注(0)|答案(1)|浏览(126)

我只是想将块连接查询和main-query与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>


有人有同样的问题吗?
多谢了!

ruarlubt

ruarlubt1#

这是因为,从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以实现完全向后兼容。

相关问题