€cdocutils.nodes document q)q}q(U nametypesq}q(XdistributedsearchingqˆXscenario: federated searchqNXdistributed searchingqNuUsubstitution_defsq }q Uparse_messagesq ]q Ucurrent_sourceq NU decorationqNUautofootnote_startqKUnameidsq}q(hUdistributedsearchingqhUscenario-federated-searchqhUdistributed-searchingquUchildrenq]q(cdocutils.nodes target q)q}q(U rawsourceqX.. _distributedsearching:UparentqhUsourceqX./tmp/pycsw-2.0.2/docs/distributedsearching.rstqUtagnameqUtargetqU attributesq }q!(Uidsq"]Ubackrefsq#]Udupnamesq$]Uclassesq%]Unamesq&]Urefidq'huUlineq(KUdocumentq)hh]ubcdocutils.nodes section q*)q+}q,(hUhhhhUexpect_referenced_by_nameq-}q.hhshUsectionq/h }q0(h$]h%]h#]h"]q1(hheh&]q2(hheuh(Kh)hUexpect_referenced_by_idq3}q4hhsh]q5(cdocutils.nodes title q6)q7}q8(hXDistributed Searchingq9hh+hhhUtitleq:h }q;(h$]h%]h#]h"]h&]uh(Kh)hh]q…q?}q@(hh9hh7ubaubcdocutils.nodes note qA)qB}qC(hXOYour server must be able to make outgoing HTTP requests for this functionality.qDhh+hhhUnoteqEh }qF(h$]h%]h#]h"]h&]uh(Nh)hh]qGcdocutils.nodes paragraph qH)qI}qJ(hhDhhBhhhU paragraphqKh }qL(h$]h%]h#]h"]h&]uh(Kh]qMh=XOYour server must be able to make outgoing HTTP requests for this functionality.qN…qO}qP(hhDhhIubaubaubhH)qQ}qR(hXvpycsw has the ability to perform distributed searching against other CSW servers. Distributed searching is disabled by default; to enable, ``server.federatedcatalogues`` must be set. A CSW client must issue a GetRecords request with ``csw:DistributedSearch`` specified, along with an optional ``hopCount`` attribute (see subclause 10.8.4.13 of the CSW specification). When enabled, pycsw will search all specified catalogues and return a unified set of search results to the client. Due to the distributed nature of this functionality, requests will take extra time to process compared to queries against the local repository.qShh+hhhhKh }qT(h$]h%]h#]h"]h&]uh(K h)hh]qU(h=XŒpycsw has the ability to perform distributed searching against other CSW servers. Distributed searching is disabled by default; to enable, qV…qW}qX(hXŒpycsw has the ability to perform distributed searching against other CSW servers. Distributed searching is disabled by default; to enable, hhQubcdocutils.nodes literal qY)qZ}q[(hX``server.federatedcatalogues``h }q\(h$]h%]h#]h"]h&]uhhQh]q]h=Xserver.federatedcataloguesq^…q_}q`(hUhhZubahUliteralqaubh=XA must be set. A CSW client must issue a GetRecords request with qb…qc}qd(hXA must be set. A CSW client must issue a GetRecords request with hhQubhY)qe}qf(hX``csw:DistributedSearch``h }qg(h$]h%]h#]h"]h&]uhhQh]qhh=Xcsw:DistributedSearchqi…qj}qk(hUhheubahhaubh=X# specified, along with an optional ql…qm}qn(hX# specified, along with an optional hhQubhY)qo}qp(hX ``hopCount``h }qq(h$]h%]h#]h"]h&]uhhQh]qrh=XhopCountqs…qt}qu(hUhhoubahhaubh=XC attribute (see subclause 10.8.4.13 of the CSW specification). When enabled, pycsw will search all specified catalogues and return a unified set of search results to the client. Due to the distributed nature of this functionality, requests will take extra time to process compared to queries against the local repository.qv…qw}qx(hXC attribute (see subclause 10.8.4.13 of the CSW specification). When enabled, pycsw will search all specified catalogues and return a unified set of search results to the client. Due to the distributed nature of this functionality, requests will take extra time to process compared to queries against the local repository.hhQubeubh*)qy}qz(hUhh+hhhh/h }q{(h$]h%]h#]h"]q|hah&]q}hauh(K h)hh]q~(h6)q}q€(hXScenario: Federated Searchqhhyhhhh:h }q‚(h$]h%]h#]h"]h&]uh(K h)hh]qƒh=XScenario: Federated Searchq„…q…}q†(hhhhubaubhH)q‡}qˆ(hXpycsw deployment with 3 configurations (CSW-1, CSW-2, CSW-3), subsequently providing three (3) endpoints. Each endpoint is based on an opaque metadata repository (based on theme/place/discipline, etc.). Goal is to perform a single search against all endpoints.q‰hhyhhhhKh }qŠ(h$]h%]h#]h"]h&]uh(Kh)hh]q‹h=Xpycsw deployment with 3 configurations (CSW-1, CSW-2, CSW-3), subsequently providing three (3) endpoints. Each endpoint is based on an opaque metadata repository (based on theme/place/discipline, etc.). Goal is to perform a single search against all endpoints.qŒ…q}qŽ(hh‰hh‡ubaubhH)q}q(hX¹pycsw realizes this functionality by supporting :ref:`alternate configurations `, and exposes the additional CSW endpoint(s) with the following design pattern:q‘hhyhhhhKh }q’(h$]h%]h#]h"]h&]uh(Kh)hh]q“(h=X0pycsw realizes this functionality by supporting q”…q•}q–(hX0pycsw realizes this functionality by supporting hhubcsphinx.addnodes pending_xref q—)q˜}q™(hX::ref:`alternate configurations `qšhhhhhU pending_xrefq›h }qœ(UreftypeXrefUrefwarnqˆU reftargetqžXalternate-configurationsU refdomainXstdqŸh"]h#]U refexplicitˆh$]h%]h&]Urefdocq Xdistributedsearchingq¡uh(Kh]q¢cdocutils.nodes inline q£)q¤}q¥(hhšh }q¦(h$]h%]q§(Uxrefq¨hŸXstd-refq©eh#]h"]h&]uhh˜h]qªh=Xalternate configurationsq«…q¬}q­(hUhh¤ubahUinlineq®ubaubh=XO, and exposes the additional CSW endpoint(s) with the following design pattern:q¯…q°}q±(hXO, and exposes the additional CSW endpoint(s) with the following design pattern:hhubeubhH)q²}q³(hX9CSW-1: ``http://localhost/pycsw/csw.py?config=CSW-1.cfg``q´hhyhhhhKh }qµ(h$]h%]h#]h"]h&]uh(Kh)hh]q¶(h=XCSW-1: q·…q¸}q¹(hXCSW-1: hh²ubhY)qº}q»(hX2``http://localhost/pycsw/csw.py?config=CSW-1.cfg``h }q¼(h$]h%]h#]h"]h&]uhh²h]q½h=X.http://localhost/pycsw/csw.py?config=CSW-1.cfgq¾…q¿}qÀ(hUhhºubahhaubeubhH)qÁ}qÂ(hX9CSW-2: ``http://localhost/pycsw/csw.py?config=CSW-2.cfg``qÃhhyhhhhKh }qÄ(h$]h%]h#]h"]h&]uh(Kh)hh]qÅ(h=XCSW-2: qÆ…qÇ}qÈ(hXCSW-2: hhÁubhY)qÉ}qÊ(hX2``http://localhost/pycsw/csw.py?config=CSW-2.cfg``h }qË(h$]h%]h#]h"]h&]uhhÁh]qÌh=X.http://localhost/pycsw/csw.py?config=CSW-2.cfgqÍ…qÎ}qÏ(hUhhÉubahhaubeubhH)qÐ}qÑ(hX9CSW-3: ``http://localhost/pycsw/csw.py?config=CSW-3.cfg``qÒhhyhhhhKh }qÓ(h$]h%]h#]h"]h&]uh(Kh)hh]qÔ(h=XCSW-3: qÕ…qÖ}q×(hXCSW-3: hhÐubhY)qØ}qÙ(hX2``http://localhost/pycsw/csw.py?config=CSW-3.cfg``h }qÚ(h$]h%]h#]h"]h&]uhhÐh]qÛh=X.http://localhost/pycsw/csw.py?config=CSW-3.cfgqÜ…qÝ}qÞ(hUhhØubahhaubeubhH)qß}qà(hXœ...where the ``*.cfg`` configuration files are configured for each respective metadata repository. The above CSW endpoints can be interacted with as usual.qáhhyhhhhKh }qâ(h$]h%]h#]h"]h&]uh(Kh)hh]qã(h=X ...where the qä…qå}qæ(hX ...where the hhßubhY)qç}qè(hX ``*.cfg``h }qé(h$]h%]h#]h"]h&]uhhßh]qêh=X*.cfgqë…qì}qí(hUhhçubahhaubh=X† configuration files are configured for each respective metadata repository. The above CSW endpoints can be interacted with as usual.qî…qï}qð(hX† configuration files are configured for each respective metadata repository. The above CSW endpoints can be interacted with as usual.hhßubeubhH)qñ}qò(hXÇTo federate the discovery of the three (3) portals into a unified search, pycsw realizes this functionality by deploying an additional configuration which acts as the superset of CSW-1, CSW-2, CSW-3:qóhhyhhhhKh }qô(h$]h%]h#]h"]h&]uh(Kh)hh]qõh=XÇTo federate the discovery of the three (3) portals into a unified search, pycsw realizes this functionality by deploying an additional configuration which acts as the superset of CSW-1, CSW-2, CSW-3:qö…q÷}qø(hhóhhñubaubhH)qù}qú(hX=CSW-all: ``http://localhost/pycsw/csw.py?config=CSW-all.cfg``qûhhyhhhhKh }qü(h$]h%]h#]h"]h&]uh(Kh)hh]qý(h=X CSW-all: qþ…qÿ}r(hX CSW-all: hhùubhY)r}r(hX4``http://localhost/pycsw/csw.py?config=CSW-all.cfg``h }r(h$]h%]h#]h"]h&]uhhùh]rh=X0http://localhost/pycsw/csw.py?config=CSW-all.cfgr…r}r(hUhjubahhaubeubhH)r}r (hXúThis allows the client to invoke one (1) CSW GetRecords request, in which the CSW endpoint spawns the same GetRecords request to 1..n distributed CSW endpoints. Distributed CSW endpoints are advertised in CSW Capabilities XML via ``ows:Constraint``:r hhyhhhhKh }r (h$]h%]h#]h"]h&]uh(Kh)hh]r (h=XçThis allows the client to invoke one (1) CSW GetRecords request, in which the CSW endpoint spawns the same GetRecords request to 1..n distributed CSW endpoints. Distributed CSW endpoints are advertised in CSW Capabilities XML via r …r}r(hXçThis allows the client to invoke one (1) CSW GetRecords request, in which the CSW endpoint spawns the same GetRecords request to 1..n distributed CSW endpoints. Distributed CSW endpoints are advertised in CSW Capabilities XML via hjubhY)r}r(hX``ows:Constraint``h }r(h$]h%]h#]h"]h&]uhjh]rh=Xows:Constraintr…r}r(hUhjubahhaubh=X:…r}r(hX:hjubeubcdocutils.nodes literal_block r)r}r(hXj ... 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 ... hhyhhhU literal_blockrh }r(Ulinenosr‰UlanguagerXxmlU xml:spacer Upreserver!h"]h#]h$]Uhighlight_argsr"}h%]h&]uh(K!h)hh]r#h=Xj ... 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 ... r$…r%}r&(hUhjubaubhH)r'}r((hXw...which advertises which CSW endpoint(s) the CSW server will spawn if a distributed search is requested by the client.r)hhyhhhhKh }r*(h$]h%]h#]h"]h&]uh(K-h)hh]r+h=Xw...which advertises which CSW endpoint(s) the CSW server will spawn if a distributed search is requested by the client.r,…r-}r.(hj)hj'ubaubhH)r/}r0(hXin the CSW-all configuration:r1hhyhhhhKh }r2(h$]h%]h#]h"]h&]uh(K/h)hh]r3h=Xin the CSW-all configuration:r4…r5}r6(hj1hj/ubaubj)r7}r8(hX­[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.cfghhyhhhjh }r9(j‰jXnonej j!h"]h#]h$]j"}h%]h&]uh(K1h)hh]r:h=X­[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.cfgr;…r<}r=(hUhj7ubaubhH)r>}r?(hX“At which point a CSW client request to CSW-all with ``distributedsearch=TRUE``, while specifying an optional ``hopCount``. Query network topology:r@hhyhhhhKh }rA(h$]h%]h#]h"]h&]uh(K7h)hh]rB(h=X4At which point a CSW client request to CSW-all with rC…rD}rE(hX4At which point a CSW client request to CSW-all with hj>ubhY)rF}rG(hX``distributedsearch=TRUE``h }rH(h$]h%]h#]h"]h&]uhj>h]rIh=Xdistributedsearch=TRUErJ…rK}rL(hUhjFubahhaubh=X, while specifying an optional rM…rN}rO(hX, while specifying an optional hj>ubhY)rP}rQ(hX ``hopCount``h }rR(h$]h%]h#]h"]h&]uhj>h]rSh=XhopCountrT…rU}rV(hUhjPubahhaubh=X. Query network topology:rW…rX}rY(hX. Query network topology:hj>ubeubj)rZ}r[(hXº AnyClient ^ | v CSW-all ^ | v /-------------\ ^ ^ ^ | | | v v v CSW-1 CSW-2 CSW-3hhyhhhjh }r\(j‰jXnonej j!h"]h#]h$]j"}h%]h&]uh(K9h)hh]r]h=Xº AnyClient ^ | v CSW-all ^ | v /-------------\ ^ ^ ^ | | | v v v CSW-1 CSW-2 CSW-3r^…r_}r`(hUhjZubaubhH)ra}rb(hXtAs a result, a pycsw deployment in this scenario may be approached on a per 'theme' basis, or at an aggregate level.rchhyhhhhKh }rd(h$]h%]h#]h"]h&]uh(KIh)hh]reh=XtAs a result, a pycsw deployment in this scenario may be approached on a per 'theme' basis, or at an aggregate level.rf…rg}rh(hjchjaubaubhH)ri}rj(hXuAll interaction in this scenario is local to the pycsw installation, so network performance would not be problematic.rkhhyhhhhKh }rl(h$]h%]h#]h"]h&]uh(KKh)hh]rmh=XuAll interaction in this scenario is local to the pycsw installation, so network performance would not be problematic.rn…ro}rp(hjkhjiubaubhH)rq}rr(hXËA very important facet of distributed search is as per Annex B of OGC:CSW 2.0.2. Given that all the CSW endpoints are managed locally, duplicates and infinite looping are not deemed to present an issue.rshhyhhhhKh }rt(h$]h%]h#]h"]h&]uh(KMh)hh]ruh=XËA very important facet of distributed search is as per Annex B of OGC:CSW 2.0.2. Given that all the CSW endpoints are managed locally, duplicates and infinite looping are not deemed to present an issue.rv…rw}rx(hjshjqubaubeubeubehUU transformerryNU footnote_refsrz}r{Urefnamesr|}r}Usymbol_footnotesr~]rUautofootnote_refsr€]rUsymbol_footnote_refsr‚]rƒU citationsr„]r…h)hU current_liner†NUtransform_messagesr‡]rˆcdocutils.nodes system_message r‰)rŠ}r‹(hUh }rŒ(h$]UlevelKh"]h#]Usourcehh%]h&]UlineKUtypeUINFOruh]rŽhH)r}r(hUh }r‘(h$]h%]h#]h"]h&]uhjŠh]r’h=X:Hyperlink target "distributedsearching" is not referenced.r“…r”}r•(hUhjubahhKubahUsystem_messager–ubaUreporterr—NUid_startr˜KU autofootnotesr™]ršU citation_refsr›}rœUindirect_targetsr]ržUsettingsrŸ(cdocutils.frontend Values r or¡}r¢(Ufootnote_backlinksr£KUrecord_dependenciesr¤NU rfc_base_urlr¥Uhttps://tools.ietf.org/html/r¦U tracebackr§ˆUpep_referencesr¨NUstrip_commentsr©NU toc_backlinksrªUentryr«U language_coder¬Uenr­U datestampr®NU report_levelr¯KU _destinationr°NU halt_levelr±KU strip_classesr²Nh:NUerror_encoding_error_handlerr³Ubackslashreplacer´UdebugrµNUembed_stylesheetr¶‰Uoutput_encoding_error_handlerr·Ustrictr¸U sectnum_xformr¹KUdump_transformsrºNU docinfo_xformr»KUwarning_streamr¼NUpep_file_url_templater½Upep-%04dr¾Uexit_status_levelr¿KUconfigrÀNUstrict_visitorrÁNUcloak_email_addressesrˆUtrim_footnote_reference_spacerÉUenvrÄNUdump_pseudo_xmlrÅNUexpose_internalsrÆNUsectsubtitle_xformrljU source_linkrÈNUrfc_referencesrÉNUoutput_encodingrÊUutf-8rËU source_urlrÌNUinput_encodingrÍU utf-8-sigrÎU_disable_configrÏNU id_prefixrÐUU tab_widthrÑKUerror_encodingrÒUUTF-8rÓU_sourcerÔhUgettext_compactrÕˆU generatorrÖNUdump_internalsr×NU smart_quotesr؉U pep_base_urlrÙU https://www.python.org/dev/peps/rÚUsyntax_highlightrÛUlongrÜUinput_encoding_error_handlerrÝj¸Uauto_id_prefixrÞUidrßUdoctitle_xformrà‰Ustrip_elements_with_classesráNU _config_filesrâ]Ufile_insertion_enabledrãˆU raw_enabledräKU dump_settingsråNubUsymbol_footnote_startræKUidsrç}rè(hh+hhyhh+uUsubstitution_namesré}rêhh)h }rë(h$]h"]h#]Usourcehh%]h&]uU footnotesrì]ríUrefidsrî}rïh]rðhasub.