假设我们在一个特定的字段上为术语“cosmopolitan”发出一个查询(确切的类型不相关),并假设结果集包含几个文档,每个文档都正好包含“cosmopolitan”的“k”示例
通过任何适用的机制(boosting、weighting、sorting等),我希望返回结果集,以便考虑文档中“cosmopolitan”的位置,即如果cosmopolitan的平均位置较低(更接近文档的开头),则其排名/得分较高。
我已经研究了不同类型的查询和脚本,但似乎找不到适用于此的内容,这似乎很奇怪,因为对于许多域来说,术语位置可能非常重要。
1条答案
按热度按时间ecbunoof1#
如果我们讨论的是任意函数的精确子串
myfield
,我们可以使用排序脚本,从整个字符串长度中减去第一次出现的索引,从而提高早期出现的次数:这个
.keyword
Map不是必需的--字段可能有fielddata: true
设置太多--无论哪种方式,我们都需要访问myfield
为了让这个脚本工作。或者,函数得分查询非常适合这里:
你可以像这样调整它的参数
boost_mode
,weight
等来满足你的需要。另外,您可能需要对所有子字符串的出现进行加权平均,您可以在这些脚本中这样做。