【问题标题】:Elasticsearch native script - assessing field value of indexed documentElasticsearch 原生脚本 - 评估索引文档的字段值
【发布时间】:2016-01-23 08:44:23
【问题描述】:

我正在尝试修改来自 imotov Github 的余弦相似度脚本。在他的脚本中,他的 docWeightSum 只获取查询中术语的术语频率 (tf),而不是文档本身中的所有术语。

以下面这个例子为例。 docWeightSum 为 9(“I”为 4,“am”为 4,“Sam”为 1)。我希望 docWeightSum 为 10(为“ham”加 1),因为我想通过两个向量的大小对点积进行归一化。

doc:“我是我是火腿山姆”

查询:“我是山姆”

所以我实际上有 2 个问题,因为我像这样将文档索引到 Elasticsearch 中:

POST /termscore/doc
{
   "text": "I am am I ham",
   "docWeightSum": 9
}
  • 是否有现有的 API 来获取每个索引文档的所有 tf​​ 的平方和,或者获取文档中不在查询中的术语的 tf?如果不是,那我该如何计算这个平方和?
  • 如果我预先计算每个文档的 tf 的平方和,并与文档内容一起放入 Elasticsearch,如上例所示,那么在计算分数时,如何访问“docWeightSum”值?

我使用的是 Elasticsearch 1.7

谢谢,

【问题讨论】:

    标签: java elasticsearch elasticsearch-plugin


    【解决方案1】:

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

    这么说,我怀疑你问错了问题。我建议不要尝试将其实现为评分脚本,而是考虑创建自己的自定义 SimilarityProvider。您很可能会发现,您试图硬塞进乐谱脚本的大部分结构都已经存在,并且更容易实现和使用。

    【讨论】:

    • 感谢您指出文档查找机制。我会尝试这种方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-20
    • 2017-12-14
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多