我正在尝试根据字段值的计数来提高相关性。字段值的计数越少,相关性越高。
例如,我有1001个文件。约翰写了1000份文件,只有一份是乔写的。
// 1000 documents by John
{"title": "abc 1", "author": "John"}
{"title": "abc 2", "author": "John"}
// ...
{"title": "abc 1000", "author": "John"}
// 1 document by Joe
{"title": "abc 1", "author": "Joe"}
当我在标题字段中搜索“abc”时,我将获得1001个文档。如果这些文档不完全相同,则它们应具有非常相似的相关性分数。字段值“John”的计数为1000,字段值“Joe”的计数为1.现在,我想提高文档{"title": "abc 1", "author": "Joe"}
的相关性,否则,很难看到与作者乔的文件。
谢谢!
答案 0 :(得分:0)
如果有人遇到相同的用例,我会使用Function Score Query来解释我的解决方法。这种方式至少会调用两次Elasticsearch服务器。
1 + sqrt(1/1000)
和乔的1 + sqrt(1/1)
。 使用脚本中的权重根据作者值计算得分(脚本可以更好):
{
"query": {
"function_score": {
"query": {
"match": { "title": "abc" }
},
"script_score" : {
"script" : {
"inline": "if (doc['author'].value == 'John') {return (1 + sqrt(1/1000)) * _score}\n return (1 + sqrt(1/1)) * _score;"
}
}
}
}
}