Elasticsearch本机脚本 - 评估索引文档

时间:2016-01-22 23:57:35

标签: java elasticsearch elasticsearch-plugin

我正试图在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
}
  • 是否有现有的API来获取每个索引文档的所有tf的总和,或者获取文档中不在查询中的术语的tf?如果没有,那么我该如何计算这个和平方?
  • 如果我预先计算每个文档的tf的总和,并将其与文档内容一起放入Elasticsearch,如上例所示,那么在计算得分时,如何访问“docWeightSum”值?

我正在使用Elasticsearch 1.7

谢谢,

1 个答案:

答案 0 :(得分:0)

要回答你的问题,这是可能的,但在运行时计算docWeightSum是非常低效的。因此,假设您预先计算了值并将其索引到单独的字段中,您可以使用doc lookup机制从本机脚本访问这些值。如果您的计算不是很复杂,您可以在function_score查询中使用field value factor并完全避免编写自己的脚本。

说,我怀疑你问的是一个错误的问题。我建议考虑创建自己的自定义SimilarityProvider,而不是尝试将其作为评分脚本实现。您很可能会发现,您尝试将其作为分数脚本的大多数构造已经存在并且更容易实现和使用。