€cdocutils.nodes document q)q}q(U nametypesq}q(Xquerying the indexqNX#regenerating the index from scratchqNXaccess policy enforcementqNX+adding additional document types and fieldsq NXdefault indexed fieldsq NXclass design overviewq NXindex configurationq NXindexed documents and fieldsq NXmetacat 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-fieldsqh Uclass-design-overviewqh Uindex-configurationqh Uindexed-documents-and-fieldsqhUmetacat-indexingq uUchildrenq!]q"(cdocutils.nodes raw q#)q$}q%(U rawsourceq&UUparentq'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-(UformatXlatexU xml:spaceq.Upreserveq/Uidsq0]Ubackrefsq1]Udupnamesq2]Uclassesq3]Unamesq4]uUlineq5KUdocumentq6hh!]q7cdocutils.nodes Text q8X\newpageq9…q:}q;(h&Uh'h$ubaubcdocutils.nodes section q<)q=}q>(h&Uh'hh(h)h*Usectionq?h,}q@(h2]h3]h1]h0]qAh ah4]qBhauh5Kh6hh!]qC(cdocutils.nodes title qD)qE}qF(h&XMetacat IndexingqGh'h=h(h)h*UtitleqHh,}qI(h2]h3]h1]h0]h4]uh5Kh6hh!]qJh8XMetacat 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&Uh'h=h(h)h*U bullet_listqch,}qd(UbulletqeX*h0]h1]h2]h3]h4]uh5Kh6hh!]qf(cdocutils.nodes list_item qg)qh}qi(h&Xfast 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!]qqh8Xfast search performanceqr…qs}qt(h&hjh'hnubaubaubhg)qu}qv(h&Xbuilt-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}h8Xbuilt-in paging featuresq~…q}q€(h&hwh'hzubaubaubhg)q}q‚(h&X2customizable return formats (for advanced admins) h'hah(h)h*hkh,}qƒ(h2]h3]h1]h0]h4]uh5Nh6hh!]q„hN)q…}q†(h&X1customizable return formats (for advanced admins)q‡h'hh(h)h*hRh,}qˆ(h2]h3]h1]h0]h4]uh5Kh!]q‰h8X1customizable return formats (for advanced admins)qŠ…q‹}qŒ(h&h‡h'h…ubaubaubeubh<)q}qŽ(h&Uh'h=h(h)h*h?h,}q(h2]h3]h1]h0]qhah4]q‘h auh5Kh6hh!]q’(hD)q“}q”(h&XIndexed documents and fieldsq•h'hh(h)h*hHh,}q–(h2]h3]h1]h0]h4]uh5Kh6hh!]q—h8XIndexed documents and fieldsq˜…q™}qš(h&h•h'h“ubaubhN)q›}qœ(h&XqMetacat integrates the existing DataONE index library which includes many common metadata formats out-of-the-box:qh'hh(h)h*hRh,}qž(h2]h3]h1]h0]h4]uh5Kh6hh!]qŸh8XqMetacat integrates the existing DataONE index library which includes many common metadata formats out-of-the-box:q …q¡}q¢(h&hh'h›ubaubcdocutils.nodes enumerated_list q£)q¤}q¥(h&Uh'hh(h)h*Uenumerated_listq¦h,}q§(Usuffixq¨U.h0]h1]h2]Uprefixq©Uh3]h4]UenumtypeqªUarabicq«uh5Kh6hh!]q¬(hg)q­}q®(h&XEMLq¯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µh8XEMLq¶…q·}q¸(h&h¯h'h²ubaubaubhg)q¹}qº(h&XFGDCq»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Áh8XFGDCqÂ…qÃ}qÄ(h&h»h'h¾ubaubaubhg)qÅ}qÆ(h&XDryad* h'h¤h(h)h*hkh,}qÇ(h2]h3]h1]h0]h4]uh5Nh6hh!]qÈhN)qÉ}qÊ(h&XDryad*qËh'hÅh(h)h*hRh,}qÌ(h2]h3]h1]h0]h4]uh5Kh!]qÍh8XDryad*qÎ…qÏ}qÐ(h&hËh'hÉubaubaubeubeubh<)qÑ}qÒ(h&Uh'h=h(h)h*h?h,}qÓ(h2]h3]h1]h0]qÔhah4]qÕh auh5Kh6hh!]qÖ(hD)q×}qØ(h&XDefault indexed fieldsqÙh'hÑh(h)h*hHh,}qÚ(h2]h3]h1]h0]h4]uh5Kh6hh!]qÛh8XDefault indexed fieldsqÜ…qÝ}qÞ(h&hÙh'h×ubaubhN)qß}qà(h&XSFor 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ãh8XSFor a complete listing of the indexed fields, please see the DataONE documentation.qä…qå}qæ(h&háh'hßubaubhN)qç}qè(h&XLhttp://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ðh8XLhttp://mule1.dataone.org/ArchitectureDocs-current/design/SearchMetadata.htmlqñ…qò}qó(h&Uh'híubah*U referenceqôubaubhN)qõ}qö(h&XIMetacat 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ùh8XIMetacat also reports on the currently-indexed fields, simply navigate to:qú…qû}qü(h&h÷h'hõubaubhN)qý}qþ(h&Xehttp://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!]rhì)r}r(h&hÿh,}r(Urefurihÿh0]h1]h2]h3]h4]uh'hýh!]rh8Xehttp://mule1.dataone.org/ArchitectureDocs-current/apis/MN_APIs.html#MNQuery.getQueryEngineDescriptionr…r}r(h&Uh'jubah*hôubaubhN)r }r (h&Xwith "solr" as the engine.r h'hÑh(h)h*hRh,}r (h2]h3]h1]h0]h4]uh5K(h6hh!]r h8Xwith "solr" as the engine.r…r}r(h&j h'j ubaubeubh<)r}r(h&Uh'h=h(h)h*h?h,}r(h2]h3]h1]h0]rhah4]rh auh5K+h6hh!]r(hD)r}r(h&XIndex configurationrh'jh(h)h*hHh,}r(h2]h3]h1]h0]h4]uh5K+h6hh!]rh8XIndex configurationr…r}r(h&jh'jubaubhN)r}r (h&XKMetacat-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'jh(h)h*hRh,}r"(h2]h3]h1]h0]h4]uh5K,h6hh!]r#h8XKMetacat-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'jubaubhN)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'jh(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).r1h'jh(h)h*hRh,}r2(h2]h3]h1]h0]h4]uh5K6h6hh!]r3h8X‚Additional advanced configuration options are available in the metacat.properties file (shared between Metacat and Metacat-index).r4…r5}r6(h&j1h'j/ubaubeubh<)r7}r8(h&Uh'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'j7h(h)h*hHh,}r@(h2]h3]h1]h0]h4]uh5K:h6hh!]rAh8X+Adding additional document types and fieldsrB…rC}rD(h&j?h'j=ubaubhN)rE}rF(h&XDTBD: Step-by-step guide for adding new documents and indexed fields.rGh'j7h(h)h*hRh,}rH(h2]h3]h1]h0]h4]uh5K;h6hh!]rIh8XDTBD: Step-by-step guide for adding new documents and indexed fields.rJ…rK}rL(h&jGh'jEubaubeubh<)rM}rN(h&Uh'h=h(h)h*h?h,}rO(h2]h3]h1]h0]rPhah4]rQhauh5K?h6hh!]rR(hD)rS}rT(h&XQuerying the indexrUh'jMh(h)h*hHh,}rV(h2]h3]h1]h0]h4]uh5K?h6hh!]rWh8XQuerying the indexrX…rY}rZ(h&jUh'jSubaubhN)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'jMh(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&XQhttp://mule1.dataone.org/ArchitectureDocs-current/apis/MN_APIs.html#MNQuery.queryreh'jMh(h)h*hRh,}rf(h2]h3]h1]h0]h4]uh5KCh6hh!]rghì)rh}ri(h&jeh,}rj(Urefurijeh0]h1]h2]h3]h4]uh'jch!]rkh8XQhttp://mule1.dataone.org/ArchitectureDocs-current/apis/MN_APIs.html#MNQuery.queryrl…rm}rn(h&Uh'jhubah*hôubaubhN)ro}rp(h&XQPlease see the SOLR documentation for examples and exhaustive syntax information.rqh'jMh(h)h*hRh,}rr(h2]h3]h1]h0]h4]uh5KEh6hh!]rsh8XQPlease see the SOLR documentation for examples and exhaustive syntax information.rt…ru}rv(h&jqh'joubaubhN)rw}rx(h&Xhttp://lucene.apache.org/solr/ryh'jMh(h)h*hRh,}rz(h2]h3]h1]h0]h4]uh5KGh6hh!]r{hì)r|}r}(h&jyh,}r~(Urefurijyh0]h1]h2]h3]h4]uh'jwh!]rh8Xhttp://lucene.apache.org/solr/r€…r}r‚(h&Uh'j|ubah*hôubaubeubh<)rƒ}r„(h&Uh'h=h(h)h*h?h,}r…(h2]h3]h1]h0]r†hah4]r‡hauh5KKh6hh!]rˆ(hD)r‰}rŠ(h&XAccess Policy enforcementr‹h'jƒh(h)h*hHh,}rŒ(h2]h3]h1]h0]h4]uh5KKh6hh!]rh8XAccess 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&Uh'h=h(h)h*h?h,}r›(h2]h3]h1]h0]rœhah4]rhauh5KTh6hh!]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&XStep-by-step instructions:r±h'j™h(h)h*hRh,}r²(h2]h3]h1]h0]h4]uh5KXh6hh!]r³h8XStep-by-step instructions:r´…rµ}r¶(h&j±h'j¯ubaubh£)r·}r¸(h&Uh'j™h(h)h*h¦h,}r¹(h¨U.h0]h1]h2]h©Uh3]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&XsStep 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Ïh8XsStep 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Ý}rÞ(h&jÙh'j×ubaubaubeubhN)rß}rà(h&XRContent 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ãh8XRContent can also be submitted for index regeneration by using the the Metacat API:rä…rå}ræ(h&jáh'jßubaubh£)rç}rè(h&Uh'j™h(h)h*h¦h,}ré(h¨U.h0]h1]h2]h©Uh3]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&XHNavigate to: //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ÿh8XHNavigate to: //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!]rhN)r}r(h&XYIf the pid parameter is omitted, all objects in Metacat will be submitted for reindexing.r h'jh(h)h*hRh,}r (h2]h3]h1]h0]h4]uh5Kbh!]r h8XYIf the pid parameter is omitted, all objects in Metacat will be submitted for reindexing.r …r }r(h&j h'jubaubaubeubeubh<)r}r(h&Uh'h=h(h)h*h?h,}r(h2]h3]h1]h0]rhah4]rh auh5Kgh6hh!]r(hD)r}r(h&XClass design overviewrh'jh(h)h*hHh,}r(h2]h3]h1]h0]h4]uh5Kgh6hh!]rh8XClass design overviewr…r}r(h&jh'jubaubcdocutils.nodes figure r)r}r(h&Uh'jh(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'jh!]h*Uimager,ubcdocutils.nodes caption r-)r.}r/(h&X Figure 1. Class design overview.r0h'jh(h)h*Ucaptionr1h,}r2(h2]h3]h1]h0]h4]uh5Kkh!]r3h8X Figure 1. Class design overview.r4…r5}r6(h&j0h'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 processDocument(String identifier, Map docs, Document doc) } class AbstractDocumentSubprocessor { - List fields + setMatchDocument(String matchDocument) + setFieldList(List fieldList) } class ResourceMapSubprocessor { } class ScienceMetadataDocumentSubprocessor { } interface ISolrField { + initExpression(XPath xpathObject) + List 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 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 + regenerateIndex() } class SolrIndex { - List subprocessors - SolrServer solrServer + insert(String pid, InputStream data) + update(String pid, InputStream data) + remove(String pid) } class SystemMetadataEventListener { - SolrIndex solrIndex + itemAdded(ItemEvent) + itemRemoved(ItemEvent) } } 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'jh(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 processDocument(String identifier, Map docs, Document doc) } class AbstractDocumentSubprocessor { - List fields + setMatchDocument(String matchDocument) + setFieldList(List fieldList) } class ResourceMapSubprocessor { } class ScienceMetadataDocumentSubprocessor { } interface ISolrField { + initExpression(XPath xpathObject) + List 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 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 + regenerateIndex() } class SolrIndex { - List subprocessors - SolrServer solrServer + insert(String pid, InputStream data) + update(String pid, InputStream data) + remove(String pid) } class SystemMetadataEventListener { - SolrIndex solrIndex + itemAdded(ItemEvent) + itemRemoved(ItemEvent) } } 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&Uh'j8ubaubeubeubeh&UU transformerr@NU footnote_refsrA}rBUrefnamesrC}rDUsymbol_footnotesrE]rFUautofootnote_refsrG]rHUsymbol_footnote_refsrI]rJU citationsrK]rLh6hU current_linerMNUtransform_messagesrN]rOUreporterrPNUid_startrQKU autofootnotesrR]rSU citation_refsrT}rUUindirect_targetsrV]rWUsettingsrX(cdocutils.frontend Values rYorZ}r[(Ufootnote_backlinksr\KUrecord_dependenciesr]NU rfc_base_urlr^Uhttps://tools.ietf.org/html/r_U tracebackr`ˆUpep_referencesraNUstrip_commentsrbNU toc_backlinksrcUentryrdU language_codereUenrfU datestamprgNU report_levelrhKU _destinationriNU halt_levelrjKU strip_classesrkNhHNUerror_encoding_error_handlerrlUbackslashreplacermUdebugrnNUembed_stylesheetro‰Uoutput_encoding_error_handlerrpUstrictrqU sectnum_xformrrKUdump_transformsrsNU docinfo_xformrtKUwarning_streamruNUpep_file_url_templatervUpep-%04drwUexit_status_levelrxKUconfigryNUstrict_visitorrzNUcloak_email_addressesr{ˆUtrim_footnote_reference_spacer|‰Uenvr}NUdump_pseudo_xmlr~NUexpose_internalsrNUsectsubtitle_xformr€‰U source_linkrNUrfc_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_sourcerh)Ugettext_compactrŽˆU generatorrNUdump_internalsrNU smart_quotesr‘‰U pep_base_urlr’U https://www.python.org/dev/peps/r“Usyntax_highlightr”Ulongr•Uinput_encoding_error_handlerr–jqUauto_id_prefixr—Uidr˜Udoctitle_xformr™‰Ustrip_elements_with_classesršNU _config_filesr›]rœUfile_insertion_enabledrˆU raw_enabledržKU dump_settingsrŸNubUsymbol_footnote_startr KUidsr¡}r¢(hhhjhj7hhÑh h=j#jhjMhjƒhjhj™uUsubstitution_namesr£}r¤h*h6h,}r¥(h2]h0]h1]Usourceh)h3]h4]uU footnotesr¦]r§Urefidsr¨}r©ub.