带你读《Elastic Stack 实战手册》之31:——3.4.2.16.Painless scripting(下)

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: 带你读《Elastic Stack 实战手册》之31:——3.4.2.16.Painless scripting(下)

《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.16.Painless scripting(中) https://developer.aliyun.com/article/1230166



通过 Painless Script 的 API 帮助:https://www.elastic.co/guide/en/elasticsearch/painless/7.10/painless-api-reference.html

最终找到 Long 类型的 API 文档地址:https://www.elastic.co/guide/en/elasticsearch/painless/7.10/painless-api-reference-shared-org-elasticsearch-index-fielddata.html#painless-api-reference-shared-ScriptDocValues-Longs

 

ScriptDocValues.Longs

 

l List asList()

l int getLength()

l Collection asCollection()

l Long get(int)

l .......

 

我们通过观察数据知道 shop_id 存储的是一个 list 数据

 

再次调整脚本:


GET user_info/_search
{
  "query": {
    "function_score": {
      "script_score": {
        "script": {
          "lang": "painless",
          "source": """
               return doc['shop_id'].getLength();
          """
        }
      }
    }
  }
}
#返回:
{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 5.0,
    "hits" : [
      {
        "_index" : "user_info",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : 5.0,
        "_source" : {
          "first" : "Michael2",
          "last" : "Jordan2",
          "shop_id" : [
            110,
            112,
            113,
            114,
            115
          ],
          "time" : "2021-05-08"
        }
      },
      {
        "_index" : "user_info",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 3.0,
        "_source" : {
          "first" : "Michael",
          "last" : "Jordan",
          "shop_id" : [
            100,
            102,
            103
          ],
          "time" : "2021-05-09"
        }
      }
    ]
  }
}

可以看到,得分最高的为 "max_score" : 5.0, 因为我们使用 script_score 调整了评分,以店铺 ID 个数为评分结果,文档 2 共计 5 个ID,所以返回的是 5 。

 

通过以上案例,详细解读了 Painless Debug 在实际场景中的应用,通过一步步分析最终掌握了调试、看错误信息、找官方文档解决的方法,最终实现了掌握 Painless Debug 的目的。

 

创作人简介 

李增胜,Elasticsearch 认证工程师、PMP 项目管理认证,现就职于汇通达网络股份有限公司,任产业交易平台交易域技术经理,从事微服务架构、搜索架构方向开发与管理工作。技术关注:电商、产业互联网等领域。

博客:https://www.jianshu.com/u/59dceda66b57

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
存储 Ubuntu 网络协议
如何本地部署Nextcloud结合cpolar搭建专属私有云盘远程访问(内网穿透)
如何本地部署Nextcloud结合cpolar搭建专属私有云盘远程访问(内网穿透)
280 0
如何本地部署Nextcloud结合cpolar搭建专属私有云盘远程访问(内网穿透)
|
安全 算法 编译器
【C++基础语法 枚举】C/C++ 中enum枚举量的介绍:介绍enum枚举量在C/C中的作用和使用方法
【C++基础语法 枚举】C/C++ 中enum枚举量的介绍:介绍enum枚举量在C/C中的作用和使用方法
303 2
|
Kubernetes Ubuntu Linux
超详细的 Vagrant 上手指南,搭建Linux虚拟机别再用VMware Workstation了!
超详细的 Vagrant 上手指南,搭建Linux虚拟机别再用VMware Workstation了!
3479 0
超详细的 Vagrant 上手指南,搭建Linux虚拟机别再用VMware Workstation了!
|
JSON API 数据处理
Winform管理系统新飞跃:无缝集成SqlSugar与Web API,实现数据云端同步的革新之路!
【8月更文挑战第3天】在企业应用开发中,常需将Winform桌面应用扩展至支持Web API调用,实现数据云端同步。本文通过实例展示如何在已有SqlSugar为基础的Winform系统中集成HTTP客户端调用Web API。采用.NET的`HttpClient`处理请求,支持异步操作。示例包括创建HTTP辅助类封装请求逻辑及在Winform界面调用API更新UI。此外,还讨论了跨域与安全性的处理策略。这种方法提高了系统的灵活性与扩展性,便于未来的技术演进。
518 2
|
7月前
|
人工智能 自然语言处理 搜索推荐
高性价比| OpenSearch 智能问答版开箱即用 DeepSeek-R1
OpenSearch LLM智能问答版基于DeepSeek-R1一分钟搭建RAG系统。
1384 11
高性价比| OpenSearch 智能问答版开箱即用 DeepSeek-R1
|
Windows
windows端口冲突解决办法
windows端口冲突解决办法
393 1
windows端口冲突解决办法
|
SQL 数据库 Windows
如何在 Windows 上安装SSMS,保姆级教程来了!
安装SQL Server Management Studio (SSMS) 的过程包括:从安装界面或微软官网下载SSMS安装包,点击运行,选择安装选项,等待安装完成,并通过SSMS连接到数据库以验证安装成功。图文教程详细展示了每个步骤,包括所需截图。
|
Java Shell
ElasticSearch关闭重启命令
很多人学习elasticSearch都是自学,想百度一下如何重启es也是没有答案,我硬着头皮,算是琢磨出来了,借此写博,希望能帮助您。 1.如何关闭ES,elasticsearch关闭办法 1.使用head插件 找到想关掉的节点进行关停 2.使用命令kill杀掉服务器的ES进程即可 1.查找ES进程 ps -ef | grep elastic 2.杀掉ES进程 kill -9 2382(进程号) 3.重启ES sh elasticsearch -d 2.如何重启ES 没有重启的办法,只有参考上面关闭->开启这样。
7111 0
|
JSON 分布式计算 关系型数据库
大数据技术之DataX
异构数据源集成,它就是神器。
大数据技术之DataX
|
Kubernetes Linux 网络安全
k8s集群部署初体验
k8s集群部署初体验
342 0