《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 项目管理认证,现就职于汇通达网络股份有限公司,任产业交易平台交易域技术经理,从事微服务架构、搜索架构方向开发与管理工作。技术关注:电商、产业互联网等领域。