我使用代码使用弹性搜索进行搜索:
es.search(index="article-index", fields="url", body={
"query": {
"query_string": {
"query": "keywordstr",
"fields": [
"text",
"title",
"tags",
"domain"
]
}
}
})
现在我想在搜索评分中插入另一个参数 - " recencyboost"。
我被告知function_score应该解决问题
res = es.search(index="article-index", fields="url", body={
"query": {
"function_score": {
"functions": {
"DECAY_FUNCTION": {
"recencyboost": {
"origin": "0",
"scale": "20"
}
}
},
"query": {
{
"query_string": {
"query": keywordstr
}
}
},
"score_mode": "multiply"
}
}
})
它给出了错误,即字典{"query_string": {"query": keywordstr}}
不可用。
1)如何修复错误?
2)如何改变衰减函数,使其对较高的近因增强提供更高的权重?
答案 0 :(得分:2)
您的搜索中似乎有一个额外的query
(总共三个),这会给您一个不受欢迎的顶级。您需要删除顶级query
并将其替换为function_score
作为顶级密钥。
res = es.search(index="article-index", fields="url", body={"function_score": {
"query": {
{ "query_string": {"query": keywordstr} }
},
"functions": {
"DECAY_FUNCTION": {
"recencyboost": {
"origin": "0",
"scale": "20"
}
}
},
"score_mode": "multiply"
})
注意:score_mode
默认为"multiply"
,未使用的boost_mode
也是如此,因此不需要提供它。
答案 1 :(得分:1)
你不能使用字典作为字典中的键。您正在以下代码段中执行此操作:
"query": {
{"query_string": {"query": keywordstr}}
},
以下应该可以正常工作
"query": {
"query_string": {"query": keywordstr}
},