我正试图在Github上修改imotov的余弦相似性脚本。在他的脚本中,他的docWeightSum只采用查询中术语的频率(tf),而不是文档本身的所有术语。
以下面的例子为例。 docWeightSum为9(“I”为4,“am”为4,“Sam”为1)。我想要的docWeightSum是10(为“火腿”添加1),因为我想通过两个向量的大小来标准化点积。
医生:“我就是哈姆山姆”查询:“Sam我是”
所以我实际上有两个问题,因为我将文档索引到Elasticsearch中就像这样:
POST /termscore/doc
{
"text": "I am am I ham",
"docWeightSum": 9
}
我正在使用Elasticsearch 1.7
谢谢,
答案 0 :(得分:0)
要回答你的问题,这是可能的,但在运行时计算docWeightSum是非常低效的。因此,假设您预先计算了值并将其索引到单独的字段中,您可以使用doc lookup机制从本机脚本访问这些值。如果您的计算不是很复杂,您可以在function_score
查询中使用field value factor并完全避免编写自己的脚本。
说,我怀疑你问的是一个错误的问题。我建议考虑创建自己的自定义SimilarityProvider,而不是尝试将其作为评分脚本实现。您很可能会发现,您尝试将其作为分数脚本的大多数构造已经存在并且更容易实现和使用。