-1

我在使用custom_filters_score. 个人分数0.81491333,加起来等于……< 0.125/ p> 0.086956520.1727262

编辑:我再次查看它,看起来 custom_filters_score 的总数正乘以“正常”查询。

有没有办法将普通查询 ( custom_score) 合并到custom_filter_score或者强制弹性搜索将两者相加(而不是相乘)?

数据、查询和映射的要点位于https://gist.github.com/sqwk/3d7b25192a236fba82b4

4

1 回答 1

1

好的 - 我终于弄清楚发生了什么。首先,在您的要点中,您的查询与您的任何文档都不匹配,因为纬度/经度。我随机选择了一份文档(323)并使用了那里的纬度/经度值。

这是我得到的解释:

 - custom score, score mode [total]                                    |    0.8795
   - Score based on score mode Max and child doc range from 10 to 16   |    1.0000
     - Child[16]                                                       |    1.0000
   - custom score, product of:                                         |    0.2000
     - match filter: cache(object_max_rooms:[4 TO *])                  |    1.0000
     - scriptFactor                                                    |    0.2000
     - queryBoost                                                      |    1.0000
   - custom score, product of:                                         |    0.5714
     - match filter: cache(object_min_living_area:[* TO 125])          |    1.0000
     - scriptFactor                                                    |    0.5714
     - queryBoost                                                      |    1.0000
   - custom score, product of:                                         |    0.1081
     - match filter: cache(object_max_living_area:[125 TO *])          |    1.0000
     - scriptFactor                                                    |    0.1081
     - queryBoost                                                      |    1.0000

如您所见,纬度/经度完全匹配,因此得分为 1,并且custom_filters_score查询的得分得到了很好的总计。

然后我将lat值从 50.0852386 更改为 50.0882386,然后重新运行。现在分数看起来像这样:

 - custom score, score mode [total]                                    |    0.7081
   - Score based on score mode Max and child doc range from 10 to 16   |    0.8050
     - Child[16]                                                       |    0.8050
   - custom score, product of:                                         |    0.2000
     - match filter: cache(object_max_rooms:[4 TO *])                  |    1.0000
     - scriptFactor                                                    |    0.2000
     - queryBoost                                                      |    1.0000
   - custom score, product of:                                         |    0.5714
     - match filter: cache(object_min_living_area:[* TO 125])          |    1.0000
     - scriptFactor                                                    |    0.5714
     - queryBoost                                                      |    1.0000
   - custom score, product of:                                         |    0.1081
     - match filter: cache(object_max_living_area:[125 TO *])          |    1.0000
     - scriptFactor                                                    |    0.1081
     - queryBoost                                                      |    1.0000

因此,过滤器的分数与查询的分数相结合,然后进行归一化。这是可以预料的。仅适用于过滤器,不适用于过滤器和查询的score_mode组合。

如果要精确组合它们,则需要将距离计算从查询移到过滤器下的custom_filters_score过滤器中。问题在于scriptfor 评分将无法访问嵌套places文档,因此您将无法做到这一点。

为什么确切的总数如此重要?永远不应将其_score视为绝对值。它只是反映了每个文档的相对重要性。您只需要调整每个条款的影响,直到您获得满足您要求的“正确”顺序。

于 2013-03-30T11:49:39.200 回答