9.3. 使用缓存进行丰富

您可以将文字缓存或外部缓存配置为查找表,以根据数据中的ID填充属性。这对于使用来自外部来源的静态信息丰富记录非常有用。在下面的示例中,我们使用 cacheLookup 函数来解析人名。 number 在每一条记录中。每个缓存都可以配置为根据 expiration 参数,以毫秒为单位。

配置:

{
  type          = "xml"
  id-field      = "uuid()"
  feature-path  = "Feature" // optional path to feature elements
  options = {
    line-mode = "multi" // or "single"
  }
  caches = {
    names = {
       type = "simple"
       data = {
         123 = {
            name = "Jane"
            email = "bar@baz.com"
         }
         148 = {
            name = "Mary"
            email = "foo@bar.com"
         }
       }
    }
  }
  fields = [
    { name = "number", path = "number",           transform = "$0::integer"       }
    { name = "color",  path = "color",            transform = "trim($0)"          }
    { name = "weight", path = "physical/@weight", transform = "$0::double"        }
    { name = "source", path = "/doc/DataSource/name/text()"                       }
    { name = "lat",    path = "geom/lat",         transform = "$0::double"        }
    { name = "lon",    path = "geom/lon",         transform = "$0::double"        }
    { name = "name",   transform = "cacheLookup('names', $number, 'name')"        }
    { name = "geom",                              transform = "point($lon, $lat)" }
  ]
}

数据:

<?xml version="1.0"?>
<doc>
    <DataSource>
        <name>myxml</name>
    </DataSource>
    <Feature>
        <number>123</number>
        <geom>
            <lat>12.23</lat>
            <lon>44.3</lon>
        </geom>
        <color>red</color>
        <physical height="5'11" weight="127.5"/>
    </Feature>
    <Feature>
        <number>456</number>
        <geom>
            <lat>20.3</lat>
            <lon>33.2</lon>
        </geom>
        <color>blue</color>
        <physical height="h2" weight="150"/>
    </Feature>
</doc>

要配置Redis缓存,请指定 caches 部分内容如下:

配置:

{
  caches = {
    redis = {
       type = "redis"
       redis-url = "url_of_redis"
       expiration = 30000 // milliseconds
    }
  }
}