动态访问 ElasticSearch 函数分数中的字段

Dynamically accessing a field in ElasticSearch function score

过去几天我一直在尝试为此找到解决方案,但找不到,所以这是我的问题。

基本上,我们在用户最终访问的文档中索引了一些用户最常用的搜索关键字。例如,如果用户搜索 "Football" 很多并最终转到文档 X,则文档 X 将具有类似

的内容
keywords: {
     "football": some int boost value
}

我想在用户使用关键字 Y 搜索后检查检索到的文档中是否存在字段 'keywords.Y',如果存在,我将使用函数 score 将 Y 乘以 _score 如果不存在,我只会 return _score.

这可能吗?这是我到目前为止构建的内容。

{
"size": "20",
"from": "0",
"sort": [],
"query": {
    "function_score": {
        "query": {
            "filtered": {
                "query": {
                    "bool": {
                        "should": [
                            {
                                "query_string": {
                                    "fields": [
                                        "cuisines.name.en^8",
                                        "cuisines.name.ar^8"
                                    ],
                                    "query": "+mori",
                                    "use_dis_max": true,
                                    "default_operator": "and"
                                }
                            },
                            {
                                "fuzzy_like_this_field": {
                                    "name.en": {
                                        "like_text": "mori",
                                        "boost": 15,
                                        "min_similarity": 0.6
                                    }
                                }
                            }
                        ]
                    }
                },
                "filter": {
                    "and": [
                        {
                            "term": {
                                "flag": 1
                            }
                        },
                        {
                            "term": {
                                "cityID": "1000"
                            }
                        }
                    ]
                }
            }
        },
        "functions": [
            {
                "script_score": {
                    "params": {
                        "q": "mori"
                    },
                    "script": "_score;"
                }
            }
        ],
        "score_mode": "multiply"
    }
}

}

所以基本上在这里,我想访问该字段,keywords.mori。抱歉问题太长了。

我不知道这是否对任何人有帮助,但我最终使用存在过滤器为包含搜索关键字的文档提供额外分数。

                                "constant_score": {
                                    "filter": {
                                        "exists": {"field": k},
                                     }
                                 }

其中 k 等于 'keywords.{searched_keyword}'