在父子文档中进行Solr搜索和评分

时间:2018-08-29 12:41:14

标签: solr

我正在建立一个Solr集合来搜索联系信息。现在的数据模型由具有联系方法的各方组成。我已经使用Solr嵌套文档的想法实现了这一点。 (如果这是一个更好的解决方案,我可以尝试将其更改为完全平面的模型。)我想运行一个由用户针对双方及其联系方式键入的简单查询,但只能返回各方。

我似乎已经做到了:

_query_:"{!edismax qf=p1 p2 p3 ... pn v=$TERMS}" 
_query_:"{!parent which="type:party"}{!edismax qf=m1 m2 m3 ... mn
          v=$TERMS}"

这里p1 ... pn是聚会字段,m1 ... mn是联系方式字段,TERMS是用户查询,两者都一样。我使用sow参数将TERMS拆分为标记,并使用tie=1.0将单个_query_的总体得分作为其组成部分的总和。

问题:

  1. 这是设置它的正确方法吗?

  2. 如果是(或者有更好的方法),如何使查询的总得分成为其两半的总和?目前,它似乎使用了最高分,即如果TERMSP MP匹配p字段之一,而M匹配{{ 1}},最终分数基于一个或另一个;另一个已计算,但被清零。

以下是相关说明:

M

即父级匹配9+,子级匹配11+,但是该子级匹配将被忽略,最终得分仍为9 +。

1 个答案:

答案 0 :(得分:0)

“父级”查询有一个“得分”参数,您可以使用它来引用下级查询(您的edismax查询)中的分数。

因此,在父查询中,添加一个score参数,并在edismax中,您可能希望对qf参数进行一些改进,例如:

void *risultato_voidp;
pthread_join(t1, &risultato_voidp);
resultato = static_cast<int*>(risultato_voidp);

您可以将max | min | total | avg等各种聚合方法用于“得分”。

参考: https://lucene.apache.org/solr/guide/6_6/other-parsers.html#OtherParsers-Scoring https://lucene.apache.org/solr/guide/6_6/the-extended-dismax-query-parser.html