有没有办法在 ElasticSearch 中取消对字段的长度规范计算?

6

lengthNorm是计算字段范数的三个因素之一。

在elastic search中,可以通过"omit_norms" : true关闭字段范数。

不幸的是,这将导致在针对这些字段进行查询时不应用索引时间加速。

是否有一种严格关闭lengthNorm计算的方法?

我需要字段级别的索引时间加速,但我确实需要忽略字段的长度。


参考

enter image description here

1个回答

4
长度规范化和字段级别的加权,正如您所说,都存储在“norm”中。因此,您不能单独使用其中之一。
但实际上,您在索引时间不需要字段加权。您可以在搜索时间应用它,这样当您想要稍后调整增强级别时,您就会拥有更多的灵活性。
不仅如此,通过设置“omit_norms”,您可以大大减少索引时间需要存储的数据量,因此建议在适当的情况下使用(例如在您的情况下)。

感谢您的回答。我想这在一定程度上取决于在查询时确定字段级别提升的成本,但我当然理解您的观点。非常感谢。 - Brian Webster
这一点都不贵。无需加载规范。它只是一个常数,被纳入得分中(例如 _score * 5),所以这是真正的优势。 - DrTech
我明白,但我没有表达清楚。在某些情况下(比如我的情况),增强需要根据文档内容而异。在查询时确定该数字可能很昂贵。例如:某些标签比其他标签更重要,其中标签可能是主文档的多值字段。因此,如果“狗”标签非常重要,但“动物”标签较弱(由于过于通用),那就很难解决。 - Brian Webster
你提到的例子(使用更通用的“animal”)可以通过逆文档频率来处理。但我猜你的实际情况比那更复杂。 - DrTech
是的,我试图发布一个通用示例,因为我的情况有点神秘。我认为我可以通过得分来解决我的问题,以某种令人满意的方式进行一些棘手的操作。如果我关闭规范化和频率(index_options:docs),我会得到标签的恒定得分。如果我能够隔离我的标签得分,我可以在ElasticSearch提供结果后使用二次排序(或得分调整)。例如,作为起点,我可以按文档(或标签)增强进行二次排序,因为基于标签的得分将是相同的。过于简化,但是这是一个起点。 - Brian Webster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接