动态访问 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}'
过去几天我一直在尝试为此找到解决方案,但找不到,所以这是我的问题。
基本上,我们在用户最终访问的文档中索引了一些用户最常用的搜索关键字。例如,如果用户搜索 "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}'