gpt4 book ai didi

elasticsearch - 基于字段值计数的ElasticSearch提升相关性

转载 作者:行者123 更新时间:2023-12-02 23:59:34 25 4
gpt4 key购买 nike

我正在尝试根据字段值的计数来提高相关性。字段值的计数越少,则越相关。

例如,我有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"}的相关性,否则,将很难看到带有作者乔。

谢谢!

最佳答案

如果有人遇到相同的用例,我将使用Function Score Query解释我的解决方法。这种方式将至少两次调用Elasticsearch服务器。

  • 获取每个人的计数(您可以使用聚合功能)。在我们的示例中,我们从John获得1000,从Joe获得1。
  • 根据计数生成权重。计数越多,相关权重就越小。类似于John的1 + sqrt(1/1000)和Joe的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;"
    }
    }
    }
    }
    }
  • 关于elasticsearch - 基于字段值计数的ElasticSearch提升相关性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50302212/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com