我只是想将块连接查询和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>
型
有人有同样的问题吗?
多谢了!
1条答案
按热度按时间ruarlubt1#
这是因为,从Solr 7.3开始,edismax的可搜索字段的默认设置实际上 * 禁止 * 使用嵌入式查询。
幸运的是,可以使用
uf
参数管理此行为。uf:指定允许最终用户显式查询哪些架构字段,并切换是否支持嵌入式Solr查询。此参数支持通配符。多个字段必须用空格分隔。
默认值是允许所有字段,不允许嵌入Solr查询,相当于
uf=* -_query_
。设置
uf=* _query_
以允许嵌入式查询。我在Solr 7.7.1上测试了它,它可以工作,但我必须将嵌入的查询用双引号括起来,否则 * 整个 * 查询失败返回0结果,没有任何通知。
此查询应该可以工作:
字符串
注意:Solr < 7.3的文档中有一些例子提到了
uf
参数中的逗号分隔列表,但预期的分隔符肯定是空格。对于那些不使用 edismax 的用户,您必须设置
luceneMatchVersion=7.1.0
以实现完全向后兼容。