将空间数据加载到SOLR中

本节提供了一个简单的示例,说明如何将shapefile转换并加载到solr实例中。有关solr中空间支持的更多高级需求和详细信息,请参阅solr文档,确保阅读与当前版本相关的文档(空间支持仍在快速发展)。

当前示例已经使用gdal 1.11和solr 4.8开发和测试,不同版本的工具和服务器可能需要不同的语法来上载。

solr实例的模式中应该有以下定义:

<field name="geo" type="location_rpt" indexed="true" stored="true" multiValued="true" />
<dynamicField name="*_i"  type="int"    indexed="true"  stored="true"/>
<dynamicField name="*_s"  type="string"  indexed="true"  stored="true" />

上面将“geo”定义为显式字段,其他类型的字段将保留为动态字段解释。

SpatialRecursivePrefixTreeFieldType接受几何体作为wkt,因此为了准备导入,我们将把一个形状文件转换成一个带有wkt几何体语法的csv文件。我们还要记住,solr需要一个唯一的ID字段来记录,坐标应该在wgs84中。有问题的shapefile在utm中,有一个linestring几何体,以及一些字段、cat、id和label。

以下命令将shapefile转换为csv格式(该命令应在一行中键入,它已拆分为多行以便于读取)::

ogr2ogr  -f CSV
         -sql 'select FID as id, cat as cat_i, label as label_s,
              "roads" as layer FROM roads'
         -lco geometry=AS_WKT -s_srs "EPSG:26713" -t_srs "EPSG:4326"
         /tmp/roads.csv roads.shp

一些观察结果:

  • SQL主要用于将特殊的fid字段包含到结果中(需要唯一的字段)。

  • 重新投影是为了确保输出几何图形在wgs84中。

  • 这个 layer_s 动态字段被添加到

这将生成一个如下所示的csv文件:

WKT,id,cat_i,label_s,layer
"LINESTRING (-103.763291353072518 44.375039982911382,-103.763393874038698 44.375282535746727,-103.764152625689903 44.376816068582023,-103.763893508430911 44.377653708326527,-103.76287152579593 44.378473197876396,-103.762075892308829 44.379009292692757,-103.76203441159079 44.379195585236509,-103.762124217456204 44.379295262047272,-103.762168141872152 44.379399997909999,-103.762326134985983 44.379527769244149,-103.763328403265064 44.380245486928708,-103.764011871363465 44.381295133519728,-103.76411460103661 44.381526706124056,-103.764953940327757 44.382396618315049,-103.765097289111338 44.382919576408355,-103.765147974157941 44.383073790503197,-103.76593766187851 44.384162856249255,-103.765899236602976 44.384607239970421,-103.765854384388703 44.384597320206453)",0,5,unimproved road,roads
"LINESTRING (-103.762930948900078 44.385847721442218,-103.763012156628747 44.386002223293282,-103.763510654805799 44.386297912655408,-103.763869052966967 44.386746022746649,-103.763971116268394 44.387444295314552,-103.764244098825387 44.387545690358827,-103.764264649212294 44.387677659170357,-103.764160551326043 44.387951214930865,-103.764540576800869 44.388042632912118,-103.764851624437995 44.388149874425885,-103.764841258550391 44.388303515682807,-103.76484332449354 44.388616502755184,-103.765188923261391 44.388927221995502,-103.765110961905023 44.389448103450221,-103.765245311197177 44.389619574129583,-103.765545516097987 44.389907903843323,-103.765765403056434 44.390420596862072,-103.766285436779711 44.391655378673697,-103.766354640463163 44.39205684519964,-103.76638734105434 44.392364628456725,-103.766410556756725 44.392776645318136,-103.765934443919321 44.393365174368313,-103.766220869020188 44.393571013181166,-103.766661604125247 44.393684955690581,-103.767294323528063 44.393734806102117,-103.767623238680557 44.394127721518785,-103.769273719703676 44.394900867042516,-103.769609703946827 44.395326786724503,-103.769732072038536 44.395745219647871,-103.769609607364416 44.396194309461826,-103.769310708537489 44.396691166475954,-103.768865902286791 44.397236074649896)",1,5,unimproved road,roads

此时,可以使用curl将csv导入solr:

curl "http://solr.geo-solutions.it/solr/collection1/update/csv?commit=true&separator=%2C&fieldnames=geo,id,cat_i,label_s,layer_s&header=true"
     -H 'Content-type:text/csv; charset=utf-8' --data-binary @/tmp/roads.csv

一些观察结果:

  • 这些文件作为 text/csv 文件,旧版本可能需要 text/plain mime类型

  • 这个 fieldnames 重写CSV头并允许我们指定SOLR所期望的字段名

此时,可以配置仅显示GeoServer UI中道路的图层:

../../_images/solr_roads_configure.png

设置道路层

设置边界框和适当的样式后,图层预览将显示存储在solr中的道路:

../../_images/solr_roads_preview.png

从SOLR层预览道路