Script Fields

允许为每次匹配返回脚本评估(基于不同的字段),例如:

  1. GET /_search
  2. {
  3. "query" : {
  4. "match_all": {}
  5. },
  6. "script_fields" : {
  7. "test1" : {
  8. "script" : {
  9. "lang": "painless",
  10. "inline": "doc['my_field_name'].value * 2"
  11. }
  12. },
  13. "test2" : {
  14. "script" : {
  15. "lang": "painless",
  16. "inline": "doc['my_field_name'].value * factor",
  17. "params" : {
  18. "factor" : 2.0
  19. }
  20. }
  21. }
  22. }
  23. }

脚本字段可以用于未存储的字段(在上述情况下为 my_field_name ),并允许返回要返回的自定义值(脚本的计算值)。

脚本字段还可以访问实际的_source文档索引并提取从中返回的特定元素(可以是 “对象” 类型)。 这里是一个例子:

  1. GET /_search
  2. {
  3. "query" : {
  4. "match_all": {}
  5. },
  6. "script_fields" : {
  7. "test1" : {
  8. "script" : "_source.obj1.obj2"
  9. }
  10. }
  11. }

注意 _source 关键字在这里用于导航 json 样模型。

了解 doc [‘my_field’].value 和 _source.my_field 之间的区别很重要。 第一个,使用 doc 关键字,将导致该字段的术语被加载到内存(缓存),这将导致更快的执行,但更多的内存消耗。 此外,doc […] 符号只允许简单的有价值的字段(不能从它返回一个 json 对象),并且只对非分析或单个术语的字段有意义。