Elasticsearch(5) function_score的使用

这篇具有很好参考价值的文章主要介绍了Elasticsearch(5) function_score的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

elasticsearch version: 7.10.1

function_score介绍

Elasticsearch 中的 function_score 查询允许你根据一组定制函数来调整每个文档的评分,从而影响搜索结果的排序

function_score语法

GET /<索引名>/_search
{
  "query": {
    "function_score": {
      "query": { /* 这里是你基础查询的内容 */ },  // 可选,默认为 match_all 查询
      "functions": [  // 可选,定义一系列函数来修改评分
        {
          "filter": { /* 可选,仅对满足此过滤条件的文档应用函数 */ },
          "weight": <数值>,  // 直接乘以权重
          "field_value_factor": { /* 基于字段值改变评分 */ },
          "script_score": { /* 使用脚本计算新的评分 */ },
          "linear": { /* 衰减函数之一 */ },
          "exp": { /* 衰减函数之一 */ },
          "gauss": { /* 衰减函数之一 */ },
          /* 其他可用的函数... */
        },
        ...
      ],
      "score_mode": "<模式>",  // 如 'multiply', 'sum', 'avg', 'first', 'max''min'
      "boost_mode": "<模式>",  // 如 'multiply', 'replace', 'sum', 'avg', 'max', 'min'
      "max_boost": <最大提升值>,  // 可选,限制评分的最大提升量
      "min_score": <最小得分阈值>  // 可选,只有超过此阈值的文档才会被返回
    }
  }
}

function_score查询流程

GET /products/_search
{
  "query": {
    "function_score": {
      "query": { "match": { "description": "fast car" } },
      "functions": [
        {
          "filter": { "term": { "brand": "luxury" } },
          "weight": 2
        },
        {
          "field_value_factor": {
            "field": "popularity",
            "modifier": "log1p",
            "missing": 1
          }
        }
      ],
      "score_mode": "multiply",
      "boost_mode": "sum"
    }
  }
}
  1. 第一个函数给品牌为"luxury"的文档增加了两倍的权重
  2. 第二个函数依据popularity字段的值来调整评分,使用的是自然对数(ln(1+x))作为调整因子,缺失值默认为1
  3. 根据指定的score_mode,将上述两个函数生成的得分相乘
  4. 因为这里设置了boost_mode为sum,原始得分

function_score案例

场景

假设我们有一个电子商务平台,其中包含商品信息,想要创建一个索引来存储产品数据,并执行一个查询来找出价格合理(价格评分高)且销售量大的热门商品。文章来源地址https://www.toymoban.com/news/detail-852459.html

索引创建

PUT /products
{
  "mappings": {
    "properties": {
      "name": { "type": "text" },
      "price": { "type": "float" },
      "sales_volume": { "type": "integer" }
    }
  }
}

文档插入

POST /products/_doc/
{
  "name": "Product A",
  "price": 100.0,
  "sales_volume": 500
}

POST /products/_doc/
{
  "name": "Product B",
  "price": 75.0,
  "sales_volume": 1200
}

POST /products/_doc/
{
  "name": "Product C",
  "price": 125.0,
  "sales_volume": 200
}

POST /products/_doc/
{
  "name": "Product D",
  "price": 90.0,
  "sales_volume": 800
}

POST /products/_doc/
{
  "name": "Product E",
  "price": 150.0,
  "sales_volume": 300
}

POST /products/_doc/
{
  "name": "Product F",
  "price": 65.0,
  "sales_volume": 1500
}

POST /products/_doc/
{
  "name": "Product G",
  "price": 85.0,
  "sales_volume": 600
}

POST /products/_doc/
{
  "name": "Product H",
  "price": 110.0,
  "sales_volume": 450
}

查询语句

GET /products/_search
{
  "query": {
    "function_score": {
      "query": { "match_all": {} }, // 或者使用其他具体的查询条件
      "functions": [
        {
          "field_value_factor": {
            "field": "price",
            "modifier": "reciprocal",
            "missing": 1000.0 // 设置默认值防止除以0错误
          }
        },
        {
          "field_value_factor": {
            "field": "sales_volume",
            "modifier": "log1p",
            "missing": 1
          }
        }
      ],
      "score_mode": "multiply",
      "boost_mode": "sum"
    }
  }
}
  1. 对price字段应用了reciprocal修饰符,意味着价格越低,分数越高。
  2. 对sakes_volume字段应用了log1p修饰符,这将根据销量给出一个更平滑的增益,销量越大,但不会过分倾斜。
  3. First, each document is scored by the defined functions. The parameter score_mode specifies how the computed scores are combined
  4. boost_mode query score and function score is multiplied (default)

到了这里,关于Elasticsearch(5) function_score的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ES 向量搜索 function score 报错

    reason \\\"function score query returned an invalid score: NaN for doc: 17085 原因是向量搜索定义评分的计算方法consineSimilarity的计算过程中需要对两个向量求模 故,如果全文索引中存在全零向量数据时,可以将consineSimilarity计算换成其它向量相似度计算方法,例如 dotProduct consineSimilarity替换为

    2024年02月15日
    浏览(31)
  • Elasticsearch 查询之Function Score Query

    前言 ES 的主查询评分模式分为两种,是信息检索领域的重要算法: TF-IDF 算法 和 BM25 算法。 Elasticsearch 从版本 5.0 开始引入了 BM25 算法作为默认的文档评分(relevance scoring)算法。在此之前,Elasticsearch 使用的是 TF-IDF 算法作为默认的文档评分算法。从版本 5.0 起,BM25 算法取代

    2024年02月12日
    浏览(29)
  • Elasticsearch(十三)搜索---搜索匹配功能④--Constant Score查询、Function Score查询

    之前我们学习了布尔查询,知道了filter查询只在乎查询条件和文档的匹配程度,但不会根据匹配程度对文档进行打分,而对于must、should这两个布尔查询会对文档进行打分,那如果我想在查询的时候同时不去在乎文档的打分(对搜索结果的排序),只想过滤文本字段是否包含这

    2024年02月11日
    浏览(32)
  • ElasticSearch第十一讲 ES检索评分score以及分数计算逻辑

    relevance score算法,简单来说,就是计算出,一个索引中的文本,与搜索文本,他们之间的关联匹配程度。Elasticsearch使用的是 term frequency/inverse document frequency算法,简称为TF/IDF算法 Term frequency:搜索文本中的各个词条在field文本中出现了多少次,出现次数越多,就越相关

    2023年04月23日
    浏览(25)
  • ElasticSearch第三讲:ES详解 - Elastic Stack生态和场景方案

    本文是ElasticSearch第三讲,在了解ElaticSearch之后,我们还要了解Elastic背后的生态 即我们 常说的ELK ;与此同时,还会给你展示ElasticSearch的 案例场景 ,让你在学习ES前对它有个全局的印象。 Beats + Logstash + ElasticSearch + Kibana 如下是我从官方博客中找到图,这张图展示了ELK生态以

    2024年02月07日
    浏览(27)
  • Elasticsearch:在 Elastic 中访问机器学习模型

    作者:Bernhard Suhm, Josh Devins Elastic® 让你可以应用适合你的用例和 ML 专业水平的机器学习 (ML)。 你有多种选择: 利用内置的模型。 除了我们的可观察性和安全解决方案中针对特定安全威胁和系统问题类型的模型外,你还可以开箱即用地使用我们专有的 Elastic Learned Sparse Encod

    2024年02月14日
    浏览(30)
  • Elasticsearch学习3-使用RestClient操作es

    JavaREST客户端有两种模式: Java Low Level REST Client:ES官方的低级客户端。低级别的客户端通过http与Elasticearch集群通信。 Java High Level REST Client:ES官方的高级客户端。基于上面的低级客户端,也是通过HTTP与ES集群进行通信。它提供了更多的接口。 此外Spring也对RestClient进行了封装

    2024年02月11日
    浏览(35)
  • 使用docker安装elastic search[ES]和kibana

    使用docker安装elastic search和kibana,版本均为7.17.1 docker pull# 去dockerhub看具体版本,这里用7.17.1 临时安装生成文件# 参数说明 -d 后台启动 –name 起别名即:NAMES -p 9200:9200 将端口映射出来 elasticsearch的9200端口是供外部访问使用;9300端口是供内部访问使用集群间通讯 -e “discovery.

    2024年02月14日
    浏览(36)
  • 使用 Elasticsearch 作为向量数据库:深入研究 dense_vector 和 script_score

    Elasticsearch 是一个非常强大且灵活的搜索和分析引擎。 虽然其主要用例围绕全文搜索,但它的用途广泛,足以用于各种其他功能。 其中一项引起许多开发人员和数据科学家关注的功能是使用 Elasticsearch 作为向量数据库。 随着 dense_vector 数据类型的出现以及利用 script_score 函数

    2024年02月07日
    浏览(40)
  • Elasticsearch:使用 Elastic APM 监控 Android 应用程序

    作者:Alexander Wert, Cesar Munoz 人们通过私人和专业的移动应用程序在智能手机上处理越来越多的事情。 拥有成千上万甚至数百万的用户,确保出色的性能和可靠性是移动应用程序和相关后端服务的提供商和运营商面临的主要挑战。 了解移动应用程序的行为、崩溃的发生和类型

    2023年04月13日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包