elasticsearch - Elasticsearch可以对值的对数进行衰减搜索吗?

标签 elasticsearch

我将数字views存储在Elasticsearch中。我想找到一个以对数刻度“最接近”的文档,以便从10万个 View 中得出10k和1MM的距离相同(并得到相同的分数)。那可能吗?

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html#exp-decay描述field value factordecay functions,但是可以“堆叠”吗?还有其他方法吗?

最佳答案

我不确定是否可以通过衰减直接实现,但是可以使用script_score函数轻松实现。下面的示例使用动态脚本,但是请注意,使用file-based scripts是推荐的更为安全的方法。

在下面的查询中,offset参数设置为100,000,并且其“ View ”字段中具有该值的文档得分最高。当 View 的值偏离offset时,得分对数衰减。根据您的示例,具有1,000,000和/或10,000的文档具有相同的分数(此公式中为0.30279312)。

您可以通过更改脚本的开头以乘以_score而不是除法来反转这些结果的顺序。

$ curl -XPOST localhost:9200/somestuff/_search -d '{
  "size": 100,
  "query": {
    "bool": {
      "must": [
        {
          "function_score": {
            "functions": [
              {
                "script_score": {
                  "params": {
                    "offset": 100000
                  },
                  "script": "_score / (1 + ((log(offset) - log(doc['views'].value)).abs()))"
                }
              }
            ]
          }
        }
      ]
    }
  }
}'

注意:您可能要考虑“ View ”为空的可能性,具体取决于您的数据。

关于elasticsearch - Elasticsearch可以对值的对数进行衰减搜索吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34770992/

相关文章:

elasticsearch - 有什么方法可以查看为什么我的v7.6 Elasticsearch映射不起作用并默认使用基本映射吗?

elasticsearch - 重命名 Elasticsearch 中的字段

elasticsearch - Elasticsearch -带有通配符的精确短语搜索

typescript - 从 elasticsearch 聚合返回复杂的嵌套文档

ruby-on-rails - Elasticsearch rails/Elasticsearch 模型搜索模型关联

node.js - 如何运行elasticsearch-hq?

elasticsearch - Elasticsearch-不同字段的不同搜索字符串

elasticsearch - 如果该属性不存在,则将附加属性添加到现有文档中

ElasticSearch:如何从头部删除索引条目?

c# - Elasticsearch Nest查询可在将字段与提供的值进行比较时修剪空白