Äcdocutils.nodes
document
q)Åq}q(U	nametypesq}q(X���querying the indexqNX#���regenerating the index from scratchqNX���access policy enforcementqNX+���adding additional document types and fieldsq	NX���default indexed fieldsq
NX���class design overviewqNX���index configurationqNX���indexed documents and fieldsq
NX���metacat indexingqNuUsubstitution_defsq}qUparse_messagesq]qUcurrent_sourceqNU
decorationqNUautofootnote_startqKUnameidsq}q(hUquerying-the-indexqhU#regenerating-the-index-from-scratchqhUaccess-policy-enforcementqh	U+adding-additional-document-types-and-fieldsqh
Udefault-indexed-fieldsqhUclass-design-overviewqhUindex-configurationqh
Uindexed-documents-and-fieldsqhUmetacat-indexingq uUchildrenq!]q"(cdocutils.nodes
raw
q#)Åq$}q%(U	rawsourceq&U�Uparentq'hUsourceq(Xe���/var/lib/jenkins/jobs/Metacat_stable/workspace/METACAT_2_7_2/docs/user/metacat/source/query-index.rstq)Utagnameq*Urawq+U
attributesq,}q-(UformatX���latexU	xml:spaceq.Upreserveq/Uidsq0]Ubackrefsq1]Udupnamesq2]Uclassesq3]Unamesq4]uUlineq5KUdocumentq6hh!]q7cdocutils.nodes
Text
q8X���\newpageq9ÖÅq:}q;(h&U�h'h$ubaubcdocutils.nodes
section
q<)Åq=}q>(h&U�h'hh(h)h*Usectionq?h,}q@(h2]h3]h1]h0]qAh ah4]qBhauh5Kh6hh!]qC(cdocutils.nodes
title
qD)ÅqE}qF(h&X���Metacat IndexingqGh'h=h(h)h*UtitleqHh,}qI(h2]h3]h1]h0]h4]uh5Kh6hh!]qJh8X���Metacat IndexingqKÖÅqL}qM(h&hGh'hEubaubcdocutils.nodes
paragraph
qN)ÅqO}qP(h&XŸ���Metacat v2.1 introduces support for building a SOLR index of Metacat content.
While we continue to support the "pathquery" search mechanism, this will be phased out
in favor of the more efficient SOLR query interface.qQh'h=h(h)h*U	paragraphqRh,}qS(h2]h3]h1]h0]h4]uh5Kh6hh!]qTh8XŸ���Metacat v2.1 introduces support for building a SOLR index of Metacat content.
While we continue to support the "pathquery" search mechanism, this will be phased out
in favor of the more efficient SOLR query interface.qUÖÅqV}qW(h&hQh'hOubaubhN)ÅqX}qY(h&X]���Metacat deployments that opt to use the Metacat SOLR index will be able to take advantage
of:qZh'h=h(h)h*hRh,}q[(h2]h3]h1]h0]h4]uh5K
h6hh!]q\h8X]���Metacat deployments that opt to use the Metacat SOLR index will be able to take advantage
of:q]ÖÅq^}q_(h&hZh'hXubaubcdocutils.nodes
bullet_list
q`)Åqa}qb(h&U�h'h=h(h)h*Ubullet_listqch,}qd(UbulletqeX���*h0]h1]h2]h3]h4]uh5Kh6hh!]qf(cdocutils.nodes
list_item
qg)Åqh}qi(h&X���fast search performanceqjh'hah(h)h*U	list_itemqkh,}ql(h2]h3]h1]h0]h4]uh5Nh6hh!]qmhN)Åqn}qo(h&hjh'hhh(h)h*hRh,}qp(h2]h3]h1]h0]h4]uh5Kh!]qqh8X���fast search performanceqrÖÅqs}qt(h&hjh'hnubaubaubhg)Åqu}qv(h&X���built-in paging featuresqwh'hah(h)h*hkh,}qx(h2]h3]h1]h0]h4]uh5Nh6hh!]qyhN)Åqz}q{(h&hwh'huh(h)h*hRh,}q|(h2]h3]h1]h0]h4]uh5Kh!]q}h8X���built-in paging featuresq~ÖÅq}qÄ(h&hwh'hzubaubaubhg)ÅqÅ}qÇ(h&X2���customizable return formats (for advanced admins)
h'hah(h)h*hkh,}qÉ(h2]h3]h1]h0]h4]uh5Nh6hh!]qÑhN)ÅqÖ}qÜ(h&X1���customizable return formats (for advanced admins)qáh'hÅh(h)h*hRh,}qà(h2]h3]h1]h0]h4]uh5Kh!]qâh8X1���customizable return formats (for advanced admins)qäÖÅqã}qå(h&háh'hÖubaubaubeubh<)Åqç}qé(h&U�h'h=h(h)h*h?h,}qè(h2]h3]h1]h0]qêhah4]qëh
auh5Kh6hh!]qí(hD)Åqì}qî(h&X���Indexed documents and fieldsqïh'hçh(h)h*hHh,}qñ(h2]h3]h1]h0]h4]uh5Kh6hh!]qóh8X���Indexed documents and fieldsqòÖÅqô}qö(h&hïh'hìubaubhN)Åqõ}qú(h&Xq���Metacat integrates the existing DataONE index library which includes many common metadata formats
out-of-the-box:qùh'hçh(h)h*hRh,}qû(h2]h3]h1]h0]h4]uh5Kh6hh!]qüh8Xq���Metacat integrates the existing DataONE index library which includes many common metadata formats
out-of-the-box:q†ÖÅq°}q¢(h&hùh'hõubaubcdocutils.nodes
enumerated_list
q£)Åq§}q•(h&U�h'hçh(h)h*Uenumerated_listq¶h,}qß(Usuffixq®U.h0]h1]h2]Uprefixq©U�h3]h4]Uenumtypeq™Uarabicq´uh5Kh6hh!]q¨(hg)Åq≠}qÆ(h&X���EMLqØh'h§h(h)h*hkh,}q∞(h2]h3]h1]h0]h4]uh5Nh6hh!]q±hN)Åq≤}q≥(h&hØh'h≠h(h)h*hRh,}q¥(h2]h3]h1]h0]h4]uh5Kh!]qµh8X���EMLq∂ÖÅq∑}q∏(h&hØh'h≤ubaubaubhg)Åqπ}q∫(h&X���FGDCqªh'h§h(h)h*hkh,}qº(h2]h3]h1]h0]h4]uh5Nh6hh!]qΩhN)Åqæ}qø(h&hªh'hπh(h)h*hRh,}q¿(h2]h3]h1]h0]h4]uh5Kh!]q¡h8X���FGDCq¬ÖÅq√}qƒ(h&hªh'hæubaubaubhg)Åq≈}q∆(h&X���Dryad*

h'h§h(h)h*hkh,}q«(h2]h3]h1]h0]h4]uh5Nh6hh!]q»hN)Åq…}q (h&X���Dryad*qÀh'h≈h(h)h*hRh,}qÃ(h2]h3]h1]h0]h4]uh5Kh!]qÕh8X���Dryad*qŒÖÅqœ}q–(h&hÀh'h…ubaubaubeubeubh<)Åq—}q“(h&U�h'h=h(h)h*h?h,}q”(h2]h3]h1]h0]q‘hah4]q’h
auh5Kh6hh!]q÷(hD)Åq◊}qÿ(h&X���Default indexed fieldsqŸh'h—h(h)h*hHh,}q⁄(h2]h3]h1]h0]h4]uh5Kh6hh!]q€h8X���Default indexed fieldsq‹ÖÅq›}qfi(h&hŸh'h◊ubaubhN)Åqfl}q‡(h&XS���For a complete listing of the indexed fields, please see the DataONE documentation.q·h'h—h(h)h*hRh,}q‚(h2]h3]h1]h0]h4]uh5K h6hh!]q„h8XS���For a complete listing of the indexed fields, please see the DataONE documentation.q‰ÖÅqÂ}qÊ(h&h·h'hflubaubhN)ÅqÁ}qË(h&XL���http://mule1.dataone.org/ArchitectureDocs-current/design/SearchMetadata.htmlqÈh'h—h(h)h*hRh,}qÍ(h2]h3]h1]h0]h4]uh5K"h6hh!]qÎcdocutils.nodes
reference
qÏ)ÅqÌ}qÓ(h&hÈh,}qÔ(UrefurihÈh0]h1]h2]h3]h4]uh'hÁh!]qh8XL���http://mule1.dataone.org/ArchitectureDocs-current/design/SearchMetadata.htmlqÒÖÅqÚ}qÛ(h&U�h'hÌubah*U	referenceqÙubaubhN)Åqı}qˆ(h&XI���Metacat also reports on the currently-indexed fields, simply navigate to:q˜h'h—h(h)h*hRh,}q¯(h2]h3]h1]h0]h4]uh5K$h6hh!]q˘h8XI���Metacat also reports on the currently-indexed fields, simply navigate to:q˙ÖÅq˚}q¸(h&h˜h'hıubaubhN)Åq˝}q˛(h&Xe���http://mule1.dataone.org/ArchitectureDocs-current/apis/MN_APIs.html#MNQuery.getQueryEngineDescriptionqˇh'h—h(h)h*hRh,}r���(h2]h3]h1]h0]h4]uh5K&h6hh!]r��hÏ)År��}r��(h&hˇh,}r��(Urefurihˇh0]h1]h2]h3]h4]uh'h˝h!]r��h8Xe���http://mule1.dataone.org/ArchitectureDocs-current/apis/MN_APIs.html#MNQuery.getQueryEngineDescriptionr��ÖÅr��}r��(h&U�h'j��ubah*hÙubaubhN)År	��}r
��(h&X���with "solr" as the engine.r��h'h—h(h)h*hRh,}r��(h2]h3]h1]h0]h4]uh5K(h6hh!]r
��h8X���with "solr" as the engine.r��ÖÅr��}r��(h&j��h'j	��ubaubeubh<)År��}r��(h&U�h'h=h(h)h*h?h,}r��(h2]h3]h1]h0]r��hah4]r��hauh5K+h6hh!]r��(hD)År��}r��(h&X���Index configurationr��h'j��h(h)h*hHh,}r��(h2]h3]h1]h0]h4]uh5K+h6hh!]r��h8X���Index configurationr��ÖÅr��}r��(h&j��h'j��ubaubhN)År��}r ��(h&XK��Metacat-index is deployed as a separate web application (metacat-index.war) and should be deployed
as a sibling of the Metacat webapp (metacat.war). Deploying metacat-index.war is only required when SOLR support
is desired (e.g., for MetacatUI) and can safely be omitted if it will not be utilized for any given Metacat deployment.r!��h'j��h(h)h*hRh,}r"��(h2]h3]h1]h0]h4]uh5K,h6hh!]r#��h8XK��Metacat-index is deployed as a separate web application (metacat-index.war) and should be deployed
as a sibling of the Metacat webapp (metacat.war). Deploying metacat-index.war is only required when SOLR support
is desired (e.g., for MetacatUI) and can safely be omitted if it will not be utilized for any given Metacat deployment.r$��ÖÅr%��}r&��(h&j!��h'j��ubaubhN)År'��}r(��(h&Xí��During the initial installation/upgrade, an empty index will be initialized in the configured "solr-home" location.
Metacat-index will index all the existing Metacat content when the webapp next initializes.
Note: the configured solr-home directory should not exist before configuring Metacat with indexing for the first time,
otherwise the blank index will not be created for metacat-index to utilize.r)��h'j��h(h)h*hRh,}r*��(h2]h3]h1]h0]h4]uh5K1h6hh!]r+��h8X�During the initial installation/upgrade, an empty index will be initialized in the configured "solr-home" location.
Metacat-index will index all the existing Metacat content when the webapp next initializes.
Note: the configured solr-home directory should not exist before configuring Metacat with indexing for the first time,
otherwise the blank index will not be created for metacat-index to utilize.r,��ÖÅr-��}r.��(h&j)��h'j'��ubaubhN)År/��}r0��(h&XÇ���Additional advanced configuration options are available in the metacat.properties file (shared between Metacat and Metacat-index).r1��h'j��h(h)h*hRh,}r2��(h2]h3]h1]h0]h4]uh5K6h6hh!]r3��h8XÇ���Additional advanced configuration options are available in the metacat.properties file (shared between Metacat and Metacat-index).r4��ÖÅr5��}r6��(h&j1��h'j/��ubaubeubh<)År7��}r8��(h&U�h'h=h(h)h*h?h,}r9��(h2]h3]h1]h0]r:��hah4]r;��h	auh5K:h6hh!]r<��(hD)År=��}r>��(h&X+���Adding additional document types and fieldsr?��h'j7��h(h)h*hHh,}r@��(h2]h3]h1]h0]h4]uh5K:h6hh!]rA��h8X+���Adding additional document types and fieldsrB��ÖÅrC��}rD��(h&j?��h'j=��ubaubhN)ÅrE��}rF��(h&XD���TBD: Step-by-step guide for adding new documents and indexed fields.rG��h'j7��h(h)h*hRh,}rH��(h2]h3]h1]h0]h4]uh5K;h6hh!]rI��h8XD���TBD: Step-by-step guide for adding new documents and indexed fields.rJ��ÖÅrK��}rL��(h&jG��h'jE��ubaubeubh<)ÅrM��}rN��(h&U�h'h=h(h)h*h?h,}rO��(h2]h3]h1]h0]rP��hah4]rQ��hauh5K?h6hh!]rR��(hD)ÅrS��}rT��(h&X���Querying the indexrU��h'jM��h(h)h*hHh,}rV��(h2]h3]h1]h0]h4]uh5K?h6hh!]rW��h8X���Querying the indexrX��ÖÅrY��}rZ��(h&jU��h'jS��ubaubhN)År[��}r\��(h&Xá���The SOLR index can be queried using standard SOLR syntax and return options.
The DataONE query interface exposes the SOLR query engine.r]��h'jM��h(h)h*hRh,}r^��(h2]h3]h1]h0]h4]uh5K@h6hh!]r_��h8X��The SOLR index can be queried using standard SOLR syntax and return options.
The DataONE query interface exposes the SOLR query engine.r`��ÖÅra��}rb��(h&j]��h'j[��ubaubhN)Årc��}rd��(h&XQ���http://mule1.dataone.org/ArchitectureDocs-current/apis/MN_APIs.html#MNQuery.queryre��h'jM��h(h)h*hRh,}rf��(h2]h3]h1]h0]h4]uh5KCh6hh!]rg��hÏ)Årh��}ri��(h&je��h,}rj��(Urefurije��h0]h1]h2]h3]h4]uh'jc��h!]rk��h8XQ���http://mule1.dataone.org/ArchitectureDocs-current/apis/MN_APIs.html#MNQuery.queryrl��ÖÅrm��}rn��(h&U�h'jh��ubah*hÙubaubhN)Åro��}rp��(h&XQ���Please see the SOLR documentation for examples and exhaustive syntax information.rq��h'jM��h(h)h*hRh,}rr��(h2]h3]h1]h0]h4]uh5KEh6hh!]rs��h8XQ���Please see the SOLR documentation for examples and exhaustive syntax information.rt��ÖÅru��}rv��(h&jq��h'jo��ubaubhN)Årw��}rx��(h&X���http://lucene.apache.org/solr/ry��h'jM��h(h)h*hRh,}rz��(h2]h3]h1]h0]h4]uh5KGh6hh!]r{��hÏ)År|��}r}��(h&jy��h,}r~��(Urefurijy��h0]h1]h2]h3]h4]uh'jw��h!]r��h8X���http://lucene.apache.org/solr/rÄ��ÖÅrÅ��}rÇ��(h&U�h'j|��ubah*hÙubaubeubh<)ÅrÉ��}rÑ��(h&U�h'h=h(h)h*h?h,}rÖ��(h2]h3]h1]h0]rÜ��hah4]rá��hauh5KKh6hh!]rà��(hD)Årâ��}rä��(h&X���Access Policy enforcementrã��h'jÉ��h(h)h*hHh,}rå��(h2]h3]h1]h0]h4]uh5KKh6hh!]rç��h8X���Access Policy enforcementré��ÖÅrè��}rê��(h&jã��h'jâ��ubaubhN)Årë��}rí��(h&Xâ��Access control is enforced by the index such that only records that are readable by the
user performing the query are returned to the user. Any SOLR query submitted will be
augmented with access control criteria corresponding to if and how the user is currently
authenticated. Both certificate-based (DataONE API) and JSESSIONID-based (Metacat API)
authentication are simultaneously supported.r�h'j��h(h)h*hRh,}r�(h2]h3]h1]h0]h4]uh5KLh6hh!]r�h8X�Access control is enforced by the index such that only records that are readable by the
user performing the query are returned to the user. Any SOLR query submitted will be
augmented with access control criteria corresponding to if and how the user is currently
authenticated. Both certificate-based (DataONE API) and JSESSIONID-based (Metacat API)
authentication are simultaneously supported.rñ��ÖÅró��}rò��(h&jì��h'jë��ubaubeubh<)Årô��}rö��(h&U�h'h=h(h)h*h?h,}rõ��(h2]h3]h1]h0]rú��hah4]rù��hauh5KTh6hh!]rû��(hD)Årü��}r†��(h&X#���Regenerating the index from scratchr°��h'jô��h(h)h*hHh,}r¢��(h2]h3]h1]h0]h4]uh5KTh6hh!]r£��h8X#���Regenerating the index from scratchr§��ÖÅr•��}r¶��(h&j°��h'jü��ubaubhN)Årß��}r®��(h&XÜ���When the SOLR index has been drastically modified, a complete regeneration of the
index may be necessary. In order to accomplish this:r©��h'jô��h(h)h*hRh,}r™��(h2]h3]h1]h0]h4]uh5KUh6hh!]r´��h8XÜ���When the SOLR index has been drastically modified, a complete regeneration of the
index may be necessary. In order to accomplish this:r¨��ÖÅr≠��}rÆ��(h&j©��h'jß��ubaubhN)ÅrØ��}r∞��(h&X���Step-by-step instructions:r±��h'jô��h(h)h*hRh,}r≤��(h2]h3]h1]h0]h4]uh5KXh6hh!]r≥��h8X���Step-by-step instructions:r¥��ÖÅrµ��}r∂��(h&j±��h'jØ��ubaubh£)År∑��}r∏��(h&U�h'jô��h(h)h*h¶h,}rπ��(h®U.h0]h1]h2]h©U�h3]h4]h™h´uh5KZh6hh!]r∫��(hg)Årª��}rº��(h&X'���Entirely remove the solr-home directoryrΩ��h'j∑��h(h)h*hkh,}ræ��(h2]h3]h1]h0]h4]uh5Nh6hh!]rø��hN)År¿��}r¡��(h&jΩ��h'jª��h(h)h*hRh,}r¬��(h2]h3]h1]h0]h4]uh5KZh!]r√��h8X'���Entirely remove the solr-home directoryrƒ��ÖÅr≈��}r∆��(h&jΩ��h'j¿��ubaubaubhg)År«��}r»��(h&Xs���Step through the Metacat admin interface main properties screen, specifying the solr-home directory you wish to user…��h'j∑��h(h)h*hkh,}r ��(h2]h3]h1]h0]h4]uh5Nh6hh!]rÀ��hN)ÅrÃ��}rÕ��(h&j…��h'j«��h(h)h*hRh,}rŒ��(h2]h3]h1]h0]h4]uh5K[h!]rœ��h8Xs���Step through the Metacat admin interface main properties screen, specifying the solr-home directory you wish to user–��ÖÅr—��}r“��(h&j…��h'jÃ��ubaubaubhg)År”��}r‘��(h&X'���Restart the webapp container (Tomcat).
h'j∑��h(h)h*hkh,}r’��(h2]h3]h1]h0]h4]uh5Nh6hh!]r÷��hN)År◊��}rÿ��(h&X&���Restart the webapp container (Tomcat).rŸ��h'j”��h(h)h*hRh,}r⁄��(h2]h3]h1]h0]h4]uh5K\h!]r€��h8X&���Restart the webapp container (Tomcat).r‹��ÖÅr›��}rfi��(h&jŸ��h'j◊��ubaubaubeubhN)Årfl��}r‡��(h&XR���Content can also be submitted for index regeneration by using the the Metacat API:r·��h'jô��h(h)h*hRh,}r‚��(h2]h3]h1]h0]h4]uh5K^h6hh!]r„��h8XR���Content can also be submitted for index regeneration by using the the Metacat API:r‰��ÖÅrÂ��}rÊ��(h&j·��h'jfl��ubaubh£)ÅrÁ��}rË��(h&U�h'jô��h(h)h*h¶h,}rÈ��(h®U.h0]h1]h2]h©U�h3]h4]h™h´uh5K`h6hh!]rÍ��(hg)ÅrÎ��}rÏ��(h&X"���Login as the Metacat administratorrÌ��h'jÁ��h(h)h*hkh,}rÓ��(h2]h3]h1]h0]h4]uh5Nh6hh!]rÔ��hN)År��}rÒ��(h&jÌ��h'jÎ��h(h)h*hRh,}rÚ��(h2]h3]h1]h0]h4]uh5K`h!]rÛ��h8X"���Login as the Metacat administratorrÙ��ÖÅrı��}rˆ��(h&jÌ��h'j��ubaubaubhg)År˜��}r¯��(h&XH���Navigate to: <host>/<metacat_context>/metacat?action=reindex[&pid={pid}]r˘��h'jÁ��h(h)h*hkh,}r˙��(h2]h3]h1]h0]h4]uh5Nh6hh!]r˚��hN)År¸��}r˝��(h&j˘��h'j˜��h(h)h*hRh,}r˛��(h2]h3]h1]h0]h4]uh5Kah!]rˇ��h8XH���Navigate to: <host>/<metacat_context>/metacat?action=reindex[&pid={pid}]r���ÖÅr��}r��(h&j˘��h'j¸��ubaubaubhg)År��}r��(h&X\���If the pid parameter is omitted, all objects in Metacat will be submitted for reindexing.


h'jÁ��h(h)h*hkh,}r��(h2]h3]h1]h0]h4]uh5Nh6hh!]r��hN)År��}r��(h&XY���If the pid parameter is omitted, all objects in Metacat will be submitted for reindexing.r	��h'j��h(h)h*hRh,}r
��(h2]h3]h1]h0]h4]uh5Kbh!]r��h8XY���If the pid parameter is omitted, all objects in Metacat will be submitted for reindexing.r��ÖÅr
��}r��(h&j	��h'j��ubaubaubeubeubh<)År��}r��(h&U�h'h=h(h)h*h?h,}r��(h2]h3]h1]h0]r��hah4]r��hauh5Kgh6hh!]r��(hD)År��}r��(h&X���Class design overviewr��h'j��h(h)h*hHh,}r��(h2]h3]h1]h0]h4]uh5Kgh6hh!]r��h8X���Class design overviewr��ÖÅr��}r��(h&j��h'j��ubaubcdocutils.nodes
figure
r��)År��}r��(h&U�h'j��h(h)h*Ufigurer ��h,}r!��(h2]h3]h1]h0]r"��Uid1r#��ah4]uh5Nh6hh!]r$��(cdocutils.nodes
image
r%��)År&��}r'��(h&XS���.. figure:: images/indexing-class-diagram.png

   Figure 1. Class design overview.
h,}r(��(UuriX!���images/indexing-class-diagram.pngr)��h0]h1]h2]h3]U
candidatesr*��}r+��U*j)��sh4]uh'j��h!]h*Uimager,��ubcdocutils.nodes
caption
r-��)År.��}r/��(h&X ���Figure 1. Class design overview.r0��h'j��h(h)h*Ucaptionr1��h,}r2��(h2]h3]h1]h0]h4]uh5Kkh!]r3��h8X ���Figure 1. Class design overview.r4��ÖÅr5��}r6��(h&j0��h'j.��ubaubeubcdocutils.nodes
comment
r7��)År8��}r9��(h&Xu��@startuml images/indexing-class-diagram.png

      package "Current cn-index-processor (library)" {

              interface IDocumentSubprocessor {
                      + boolean canProcess(Document doc)
                      + initExpression(XPath xpath)
                      + Map<String, SolrDoc> processDocument(String identifier, Map<String, SolrDoc> docs, Document doc)
              }
              class AbstractDocumentSubprocessor {
                      - List<SolrField> fields
                      + setMatchDocument(String matchDocument)
                      + setFieldList(List<SolrField> fieldList)
              }
              class ResourceMapSubprocessor {
              }
              class ScienceMetadataDocumentSubprocessor {
              }

              interface ISolrField {
                      + initExpression(XPath xpathObject)
                      + List<SolrElementField> getFields(Document doc, String identifier)
              }
              class SolrField {
                      - String name
                      - String xpath
                      - boolean multivalue
              }
              class CommonRootSolrField {
              }
              class RootElement {
              }
              class LeafElement {
              }
              class FullTextSolrField {
              }
              class MergeSolrField {
              }
              class ResolveSolrField {
              }
              class SolrFieldResourceMap {
              }

              class SolrDoc {
                    - List<SolrElementField> fieldList
              }

              class SolrElementField {
                    - String name
                    - String value
              }

      }

      IDocumentSubprocessor <|-- AbstractDocumentSubprocessor
      AbstractDocumentSubprocessor <|-- ResourceMapSubprocessor
      AbstractDocumentSubprocessor <|-- ScienceMetadataDocumentSubprocessor

      ISolrField <|-- SolrField
      SolrField <|-- CommonRootSolrField
      CommonRootSolrField o--"1" RootElement
      RootElement o--"*" LeafElement
      SolrField <|-- FullTextSolrField
      SolrField <|-- MergeSolrField
      SolrField <|-- ResolveSolrField
      SolrField <|-- SolrFieldResourceMap

      AbstractDocumentSubprocessor o--"*" ISolrField

      IDocumentSubprocessor --> SolrDoc

      SolrDoc o--"*" SolrElementField

      package "SOLR (library)" {

      abstract class SolrServer {
          + add(SolrInputDocument doc)
          + deleteByQuery(String id)
          + query(SolrQuery query)
      }
      class EmbeddedSolrServer {
      }
      class HttpSolrServer {
      }

  }

  SolrServer <|-- EmbeddedSolrServer
  SolrServer <|-- HttpSolrServer

      package "Metact-index (webapp)" {

              class ApplicationController {
                  - List<SolrIndex> solrIndex
                  + regenerateIndex()
              }

              class SolrIndex {
                      - List<IDocumentSubprocessor> subprocessors
                      - SolrServer solrServer
                      + insert(String pid, InputStream data)
                      + update(String pid, InputStream data)
                      + remove(String pid)
              }

              class SystemMetadataEventListener {
                      - SolrIndex solrIndex
                      + itemAdded(ItemEvent<SystemMetadata>)
                      + itemRemoved(ItemEvent<SystemMetadata>)
              }

      }

      package "Metacat (webapp)" {

              class MetacatSolrIndex {
                      - SolrServer solrServer
                      + InputStream query(SolrQuery)
              }

              class HazelcastService {
                      - IMap hzIndexQueue
                      - IMap hzSystemMetadata
                      - IMap hzObjectPath
              }

      }

      MetacatSolrIndex o--"1" SolrServer
      HazelcastService .. SystemMetadataEventListener

      ApplicationController o--"*" SolrIndex
      SolrIndex o--"1" SolrServer
      SolrIndex "1"--o SystemMetadataEventListener
      SolrIndex o--"*" IDocumentSubprocessor: Assembled using Spring bean configuration




@endumlh'j��h(h)h*Ucommentr:��h,}r;��(h.h/h0]h1]h2]h3]h4]uh5K˘h6hh!]r<��h8Xu��@startuml images/indexing-class-diagram.png

      package "Current cn-index-processor (library)" {

              interface IDocumentSubprocessor {
                      + boolean canProcess(Document doc)
                      + initExpression(XPath xpath)
                      + Map<String, SolrDoc> processDocument(String identifier, Map<String, SolrDoc> docs, Document doc)
              }
              class AbstractDocumentSubprocessor {
                      - List<SolrField> fields
                      + setMatchDocument(String matchDocument)
                      + setFieldList(List<SolrField> fieldList)
              }
              class ResourceMapSubprocessor {
              }
              class ScienceMetadataDocumentSubprocessor {
              }

              interface ISolrField {
                      + initExpression(XPath xpathObject)
                      + List<SolrElementField> getFields(Document doc, String identifier)
              }
              class SolrField {
                      - String name
                      - String xpath
                      - boolean multivalue
              }
              class CommonRootSolrField {
              }
              class RootElement {
              }
              class LeafElement {
              }
              class FullTextSolrField {
              }
              class MergeSolrField {
              }
              class ResolveSolrField {
              }
              class SolrFieldResourceMap {
              }

              class SolrDoc {
                    - List<SolrElementField> fieldList
              }

              class SolrElementField {
                    - String name
                    - String value
              }

      }

      IDocumentSubprocessor <|-- AbstractDocumentSubprocessor
      AbstractDocumentSubprocessor <|-- ResourceMapSubprocessor
      AbstractDocumentSubprocessor <|-- ScienceMetadataDocumentSubprocessor

      ISolrField <|-- SolrField
      SolrField <|-- CommonRootSolrField
      CommonRootSolrField o--"1" RootElement
      RootElement o--"*" LeafElement
      SolrField <|-- FullTextSolrField
      SolrField <|-- MergeSolrField
      SolrField <|-- ResolveSolrField
      SolrField <|-- SolrFieldResourceMap

      AbstractDocumentSubprocessor o--"*" ISolrField

      IDocumentSubprocessor --> SolrDoc

      SolrDoc o--"*" SolrElementField

      package "SOLR (library)" {

      abstract class SolrServer {
          + add(SolrInputDocument doc)
          + deleteByQuery(String id)
          + query(SolrQuery query)
      }
      class EmbeddedSolrServer {
      }
      class HttpSolrServer {
      }

  }

  SolrServer <|-- EmbeddedSolrServer
  SolrServer <|-- HttpSolrServer

      package "Metact-index (webapp)" {

              class ApplicationController {
                  - List<SolrIndex> solrIndex
                  + regenerateIndex()
              }

              class SolrIndex {
                      - List<IDocumentSubprocessor> subprocessors
                      - SolrServer solrServer
                      + insert(String pid, InputStream data)
                      + update(String pid, InputStream data)
                      + remove(String pid)
              }

              class SystemMetadataEventListener {
                      - SolrIndex solrIndex
                      + itemAdded(ItemEvent<SystemMetadata>)
                      + itemRemoved(ItemEvent<SystemMetadata>)
              }

      }

      package "Metacat (webapp)" {

              class MetacatSolrIndex {
                      - SolrServer solrServer
                      + InputStream query(SolrQuery)
              }

              class HazelcastService {
                      - IMap hzIndexQueue
                      - IMap hzSystemMetadata
                      - IMap hzObjectPath
              }

      }

      MetacatSolrIndex o--"1" SolrServer
      HazelcastService .. SystemMetadataEventListener

      ApplicationController o--"*" SolrIndex
      SolrIndex o--"1" SolrServer
      SolrIndex "1"--o SystemMetadataEventListener
      SolrIndex o--"*" IDocumentSubprocessor: Assembled using Spring bean configuration




@endumlr=��ÖÅr>��}r?��(h&U�h'j8��ubaubeubeubeh&U�Utransformerr@��NU
footnote_refsrA��}rB��UrefnamesrC��}rD��Usymbol_footnotesrE��]rF��Uautofootnote_refsrG��]rH��Usymbol_footnote_refsrI��]rJ��U	citationsrK��]rL��h6hUcurrent_linerM��NUtransform_messagesrN��]rO��UreporterrP��NUid_startrQ��KU
autofootnotesrR��]rS��U
citation_refsrT��}rU��Uindirect_targetsrV��]rW��UsettingsrX��(cdocutils.frontend
Values
rY��orZ��}r[��(Ufootnote_backlinksr\��KUrecord_dependenciesr]��NUrfc_base_urlr^��Uhttps://tools.ietf.org/html/r_��U	tracebackr`��àUpep_referencesra��NUstrip_commentsrb��NU
toc_backlinksrc��Uentryrd��U
language_codere��Uenrf��U	datestamprg��NUreport_levelrh��KU_destinationri��NU
halt_levelrj��KU
strip_classesrk��NhHNUerror_encoding_error_handlerrl��Ubackslashreplacerm��Udebugrn��NUembed_stylesheetro��âUoutput_encoding_error_handlerrp��Ustrictrq��U
sectnum_xformrr��KUdump_transformsrs��NU
docinfo_xformrt��KUwarning_streamru��NUpep_file_url_templaterv��Upep-%04drw��Uexit_status_levelrx��KUconfigry��NUstrict_visitorrz��NUcloak_email_addressesr{��àUtrim_footnote_reference_spacer|��âUenvr}��NUdump_pseudo_xmlr~��NUexpose_internalsr��NUsectsubtitle_xformrÄ��âUsource_linkrÅ��NUrfc_referencesrÇ��NUoutput_encodingrÉ��Uutf-8rÑ��U
source_urlrÖ��NUinput_encodingrÜ��U	utf-8-sigrá��U_disable_configrà��NU	id_prefixrâ��U�U	tab_widthrä��KUerror_encodingrã��UUTF-8rå��U_sourcerç��h)Ugettext_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ñ��jq��Uauto_id_prefixró��Uidrò��Udoctitle_xformrô��âUstrip_elements_with_classesrö��NU
_config_filesrõ��]rú��Ufile_insertion_enabledrù��àUraw_enabledrû��KU
dump_settingsrü��NubUsymbol_footnote_startr†��K�Uidsr°��}r¢��(hhçhj��hj7��hh—h h=j#��j��hjM��hjÉ��hj��hjô��uUsubstitution_namesr£��}r§��h*h6h,}r•��(h2]h0]h1]Usourceh)h3]h4]uU	footnotesr¶��]rß��Urefidsr®��}r©��ub.