我们确实有一个电子书索引,其中包含电子书的元数据和作为单个文档的每一页:
- 第一册
- 第 1 页
- 第2页
- 第 3 页
- ...
- 第 n 页
父文档包含一个字段is_parent:true
,一个id
和doc_id
。对于父文档,id
与 doc_id 相同,对于子文档,id
是{doc_id}_{page_number}
。父母和孩子总是相同的(这doc_id
就是我们知道哪个孩子属于哪个父母的方式)。
所以现在的挑战是提供一个全文搜索,它使用 eDisMax 从父元数据和子内容中找到搜索词的最佳结果,并将它们组合成一个分值。
当前查询如下所示:
'fl' => 'id,doc_id,main_type,title,subtitle,publishing_date,page_number,author,score',
'defType' => 'edismax',
'stopwords' => 'true',
'mm' => '1',
'qf' => 'id^10.0 title^50.0 subtitle^40.0 author^20.0',
'q' => 'TEST _query_:"{!parent which=is_parent:true score=Max}{!dismax qf='content' v='TEST'}"^20',
'sort' => 'score DESC'
但似乎_query_
没有将分数添加到主查询的分数中。另外,如果我在开头没有“TEST”术语的情况下执行此操作:'q' =>'_query_:"{!parent which=is_parent:true score=Max}{!dismax qf='content' v='TEST'}"^20',
我得到一个分值 - 所以不知何故分数就在那里,但我不确定如何正确使用它。
是否有另一种选择可以使用组合分数进行嵌套搜索?
在问题出现之前,我们为什么不使用 SOLR 的嵌套文档功能:我们在几年前使用 SOLR 4.6 创建了这个索引,而这个功能当时并不存在。我们现在使用 SOLR 5 和 SOLR 6 的 IndexUpdater 工具将我们的索引更新到 SOLR 6。
过去我们无法创建全文搜索,因为 SOLR BlockJoin 功能根本不支持分数计算,但在 SOLR 5 中发生了变化,所以我们想再试一次。正确方向的每一个提示都会有所帮助。