2

我们确实有一个电子书索引,其中包含电子书的元数据和作为单个文档的每一页:

  • 第一册
    • 第 1 页
    • 第2页
    • 第 3 页
    • ...
    • 第 n 页

父文档包含一个字段is_parent:true,一个iddoc_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 中发生了变化,所以我们想再试一次。正确方向的每一个提示都会有所帮助。

4

0 回答 0