我只想将块连接查询和主查询与 edismax-parser 结合起来,就像我为 solr < 7.2 所做的那样
berlin OR _query_:"{!parent which=type:book}page_content:berlin"
Run Code Online (Sandbox Code Playgroud)
但 edismax 不能再成为用于此目的的默认解析器(s. https://issues.apache.org/jira/browse/SOLR-11501)
因此它可以与 lucene-QueryParser 一起使用来查询父级:
q={!parent which="type:book"}{!edismax qf='page_content' v='berlin'}
Run Code Online (Sandbox Code Playgroud)
它仍然适用于添加主查询,例如
q=title:berlin* AND {!parent which="type:book"}{!edismax qf='page_content' v='berlin'}
Run Code Online (Sandbox Code Playgroud)
但当我尝试时
q={!edismax qf='title' v='berlin'} OR {!parent which="type:book"}{!edismax qf='page_content' v='berlin'}
Run Code Online (Sandbox Code Playgroud)
仅评估查询的第一部分。
我的文档是:
<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>
Run Code Online (Sandbox Code Playgroud)
有人有同样的问题吗?
多谢!
这是因为,从 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"
Run Code Online (Sandbox Code Playgroud)
注意:Solr < 7.3 的文档中有示例提到uf参数中的逗号分隔列表,但预期的分隔符肯定是空格。
对于那些不使用edismax的人,您必须设置luceneMatchVersion=7.1.0为完全向后兼容。
| 归档时间: |
|
| 查看次数: |
1328 次 |
| 最近记录: |