我有一个Elasticsearch映射,其中包含语言代码的字段,例如EN,DE,ES,FR等。如果用户开始用英语搜索,我想提高搜索结果中的所有英文文档;法语,西班牙语,德语等也一样。
我想,script_score
是要走的路:
"script_score" : {
"script" : "_score * doc['my_numeric_field'].value"
}
但是,我需要比较每个索引文档的语言代码。将LANG
作为用户的当前语言代码,可能如下所示:
"script_score" : {
"script" : "_score * ("+LANG+" == doc['lang'].value ? 2 : 1)"
}
这里的本质是一个三元运算符,以便在语言与当前用户的语言匹配的情况下以两倍的方式提升有问题的文档:
LANG == doc['lang'] ? 2 : 1
到目前为止,任何此类功能都被ES忽略了。
答案 0 :(得分:1)
使用function_score
,更具体地说script_score
确实是可行的方法。我这样做的方法是使用一个名为LANG
的参数,您可以使用当前用户的语言进行初始化(例如下面的"LANG": "EN"
)。然后,您的脚本只需要将文档的lang
字段与LANG
参数进行比较,然后将得分乘以2而不是1。
{
"script_score": {
"script": "_score * (doc.lang.value == LANG ? 2 : 1)",
"params": {
"LANG": "EN"
}
}