脚本字段(Script Fields)

Script Fields

  允许为每个命中返回脚本评估(基于不同的字段),例如:

GET /_search
{
    "query" : {
        "match_all": {}
    },
    "script_fields" : {
        "test1" : {
            "script" : {
                "lang": "painless",
                "inline": "doc['my_field_name'].value * 2"
            }
        },
        "test2" : {
            "script" : {
                "lang": "painless",
                "inline": "doc['my_field_name'].value * factor",
                "params" : {
                    "factor"  : 2.0
                }
            }
        }
    }
}

  脚本字段可以在不存储的字段(上述情况下为my_field_name)中工作,并允许返回要返回的自定义值(脚本的评估值)。

  脚本字段也可以访问实际的_source文档,并通过使用params ['_ source']提取要返回的特定元素。这是一个例子:

GET /_search
    {
        "query" : {
            "match_all": {}
        },
        "script_fields" : {
            "test1" : {
                "script" : "params['_source']['message']"
            }
        }
    }

  注意_source关键字在这里导航json-like的模式

  了解doc ['my_field'].value和params ['_ source'] ['my_field']之间的区别很重要。第一使用doc关键字将导致该字段的术语被加载到内存(缓存),这将导致更快的执行,但是更多的内存消耗。此外,doc [...]符号只允许简单的有值的字段(不能从中返回一个json对象),并且只对非分析或单个术语的字段有意义。但是,使用doc仍然是从文档访问值的推荐方法,如果可能的话,因为_source必须在每次使用时被加载和解析。使用_source是非常慢的。

 

原文地址:https://www.elastic.co/guide/en/elasticsearch/reference/5.0/search-request-script-fields.html

posted @ 2017-07-25 16:42  流浪三毛  阅读(857)  评论(0编辑  收藏  举报