首页 > 解决方案 > 查询时如何将参数传递给相似性脚本函数

问题描述

在配对匹配中,公式 2*no.of 配对/并集配对*100

例如:santhoshi 在弹性索引文档值中,santhosh 是查询中的搜索元素,然后 santhoshi 中的对数 = 8,匹配的对数 = 7,santhosh 中的对数 = 7

result = 2*7/(7_8)*100 = 93%......

我尝试了以下代码,其中提交的 .sumDocFreq 是“类型”:

非法参数异常,“原因”:“未定义变量 [字段]。”

代码:

{ "query": {
        "function_score": {
             "query": {
              "match": {
                "Name":"santhosh"
              }
            },
             "min_score":100,
            "functions": [
                {
                    "script_score": {
                         "script": {
                        "params" : {
                            "inputpairlength": 6 },
                        "source": "double tf = doc.freq; double ttf = field.sumDocFreq;  return (2* tf /(params.inputpairlength + ttf)) * 100;"
                         }
                    }
                }
            ]
        }
    }

}

 "settings": {
      "similarity": {
      "scripted_tfidf": {
        "type": "scripted",
        "script": {
          "source": "double tf = doc.freq; double ttf = field.sumDocFreq;  return  tf / (params.inputpairlength+ttf) * 100;"
        }
      }
    },

获取 param.input 未定义

我需要使用这个传递参数并计算分数

double tf = doc.freq; 
double ttf = field.sumDocFreq;  
return  tf / (params.inputpairlength+ttf) * 100

标签: elasticsearch

解决方案


这是访问字段统计信息的错误方式。访问字段统计信息 -

_index['FIELD'].docCount()

您可以在此处阅读更多相关信息 -弹性指南


推荐阅读