我正在建立一个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_
的总体得分作为其组成部分的总和。
问题:
这是设置它的正确方法吗?
如果是(或者有更好的方法),如何使查询的总得分成为其两半的总和?目前,它似乎使用了最高分,即如果TERMS
是P M
,P
匹配p
字段之一,而M
匹配{{ 1}},最终分数基于一个或另一个;另一个已计算,但被清零。
以下是相关说明:
M
即父级匹配9+,子级匹配11+,但是该子级匹配将被忽略,最终得分仍为9 +。
答案 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