分布式搜索¶
注解
此功能的作用就是可以使你的服务器传出HTTP请求。
pycsw与其它CSW服务器不同的是,它有能力自己实现分布式搜索。此分布式搜索默认为禁用;若想启用,必须设置 server.federatedcatalogues
。CSW客户端会发出一个 Getrecords
指定性请求 csw:DistributedSearch
,以及一个可选的 hopCount
属性(见CSW规范中第10.8.4.13 )。当启用时,pycsw会搜索所有指定的目录并会将一组统一的搜索结果返回给客户端。由于此功能的分布式性质,若要查询本地存储库,请求可能会需要更多的时间来处理。
场景:联合搜索¶
pycsw部署共有3项配置(CSW-1,CSW-2,CSW-3),同时也会提供3个端点。每个端点是基于一个不透明的元数据信息库(基于主题/地点/学科等)。目标是执行对所有端点一对一的搜索。
pycsw的本功能是靠 交替配置 支持的,并是按以下设计模式来公开其他CSW端点的︰
CSW-1: http://localhost/pycsw/csw.py?config=CSW-1.cfg
CSW-2: http://localhost/pycsw/csw.py?config=CSW-2.cfg
CSW-3: http://localhost/pycsw/csw.py?config=CSW-3.cfg
只要有 *.cfg
这个配置文件,它就可以为每个元数据存储库进行配置。 以上的CSW端点也可以像往常一样进行交互。
将这3个门户联合成统一的搜索,pycsw就可以通过部署超集的CSW-1、 CSW-2、 CSW-3 这些附加配置来实现此功能:
所有的CSW: http://localhost/pycsw/csw.py?config=CSW-all.cfg
这允许客户端调用 1 CSW GetRecords 请求,其中CSW端点就会生成相同的GetRecords请求,从1到n分布各个CSW 终结点。分布式CSW端点通过 'ows:Constraint' 在CSW功能 XML上发布广告︰
<ows:OperationsMetadata>
...
<ows:Constraint name="FederatedCatalogues">
<ows:Value>http://localhost/pycsw/csw.py?config=CSW-1.cfg</ows:Value>
<ows:Value>http://localhost/pycsw/csw.py?config=CSW-2.cfg</ows:Value>
<ows:Value>http://localhost/pycsw/csw.py?config=CSW-3.cfg</ows:Value>
</ows:Constraint>
...
</ows:OperationsMetadata>
如果在客户端请求分布式搜索的话,CSW服务器将spawn。
CSW-all 配置
[server]
...
federatedcatalogues=http://localhost/pycsw/csw.py?config=CSW-1.cfg,http://localhost/pycsw/csw.py?config=CSW-2.cfg,http://localhost/pycsw/csw.py?config=CSW-3.cfg
当指定选项 hopCount
时,CSW客户端就会用 distributedsearch=TRUE
请求所有的CSW。 查询网络拓扑 ︰
AnyClient
^
|
v
CSW-all
^
|
v
/-------------\
^ ^ ^
| | |
v v v
CSW-1 CSW-2 CSW-3
因此,在这个场景中,pycsw 部署就会深入每个 '主题' 的基础部分或总体水平。
在这个场景中的所有交互都是在本地pycsw 安装的,所以网络性能的好与坏是不会产生影响的。
分布式搜索的一个非常重要的方面是OGC的附件B问题:CSW 2.0.2。鉴于所有的CSW端点都是本地管理,因此复制和无限循环不会存在问题。