我只想将块连接查询和主查询与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>
有人有同样的问题吗?
非常感谢!
答案 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
设置为完全向后兼容。