Solr索引XML策略。在保存之前,将所有XML保存为字段与预处理XML

时间:2014-04-28 18:02:27

标签: java xml solr lucene

下午好。

我在Sorl很新。我需要索引来自WS通信请求/响应的许多XML文件以及更多通用信息(如“模板”),该模板具有调用的服务,操作,消耗的时间等等。

我在Solr中使用索引进行了一些测试,我宣传了两种策略来索引所有这些数据。一种解决方案是在Solr索引中的文档的两个字段中保存请求和响应的所有XML。 另一个是对请求和响应进行转换,并提取对我们很重要的数据,并在一些感兴趣的字段中使用该信息填充索引。

我将提供第一个替代方案的小例子,将所有XML保存为字段

索引架构

<!-- Service Template data!-->
   <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false"/> 
   <field name="service" type="text_general" indexed="true" stored="true"/>
   <field name="version" type="string"  indexed="true" stored="true"/>
   <field name="operation" type="text_general" indexed="true" stored="true"/>
   <field name="server" type="text_general" indexed="true" stored="true"/>
   <field name="url" type="text_general" indexed="true" stored="true"/>
   <field name="invocationTime" type="int" indexed="true" stored="true"/>
   <field name="appName" type="string" indexed="true" stored="true"/>
   <field name="userName" type="string" indexed="true" stored="true"/>
   <field name="dateHour" type="date" indexed="true" stored="true"/>
   <field name="error" type="boolean" indexed="true" stored="true"/>
   <field name="businessFault" type="boolean" indexed="true" stored="true"/>
   <field name="request" type="text_general" indexed="true" stored="true"/> <!-- here will save all the XML body of the request -->
   <field name="response" type="text_general" indexed="true" stored="true"/> <!-- here will save all the XML body of the response -->

索引数据

<doc>
    <!-- Service Template data-->
    <field name="id">ID:10.250.2.31-1456089599e-12:13722</field>
    <field name="service">SocioUnificado</field>
    <field name="version">v1</field>
    <field name="operation">getSocioCompleto</field>
    <field name="server">testesb.osde.ar</field>
    <field name="url">http://testesb.osde.ar/ESB/jbi/Socio/</field>
    <field name="invocationTime">450</field>
    <field name="appName">ESB_SUPPORT</field>
    <field name="userName">FLUX</field>
    <field name="dateHour">2014-04-11T08:45:56Z</field>
    <field name="error">false</field>
    <field name="businessFault">false</field>
    <field name="request"><![CDATA[<getXX>
         <dataFilter>
            <date>20120813</date>
            <contractNumber>234</contractNumber>
            <orderNumber>01</orderNumber>
         </dataFilter>
      </dataFilter>]]></field>
    <field name="response"><![CDATA[<getXXResponse>
         <client>
            <contract>
               <attentionCenterInfo>
                  <code>11</code>
                  <description>CALIFORNIA LA</description>
                  <buildingInfo>
                     <code>35</code>
                     <description>BIG BUILDING 2</description>
                  </buildingInfo>
               </attentionCenterInfo>
    ... And a lot of more XML DATA ... ]]>
  </doc>

保存前的第二个替代预处理XML

索引架构

   <!-- Service Template data!-->
   <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false"/> 
   <field name="service" type="text_general" indexed="true" stored="true"/>
   <field name="version" type="string"  indexed="true" stored="true"/>
   <field name="operation" type="text_general" indexed="true" stored="true"/>
   <field name="server" type="text_general" indexed="true" stored="true"/>
   <field name="url" type="text_general" indexed="true" stored="true"/>
   <field name="invocationTime" type="int" indexed="true" stored="true"/>
   <field name="appName" type="string" indexed="true" stored="true"/>
   <field name="userName" type="string" indexed="true" stored="true"/>
   <field name="dateHour" type="date" indexed="true" stored="true"/>
   <field name="error" type="boolean" indexed="true" stored="true"/>
   <field name="businessFault" type="boolean" indexed="true" stored="true"/>
   <!-- Service particular data -->
   <field name="contractNumber" type="text_general" indexed="true" stored="true"/>
   <field name="orderNumber" type="text_general" indexed="true" stored="true"/>
   <field name="date" type="text_general" indexed="true" stored="true"/>

索引数据

 <doc>
    <!-- Service Template data-->
    <field name="id">ID:10</field>
    <field name="service">service1</field>
    <field name="version">v1</field>
    <field name="operation">getXX</field>
    <field name="server">server1</field>
    <field name="url">http://server1/ESB/service1/</field>
    <field name="invocationTime">450</field>
    <field name="appName">ESB_SUPPORT</field>
    <field name="userName">ODOR</field>
    <field name="dateHour">2014-04-11T08:45:56Z</field>
    <field name="error">false</field>
    <field name="businessFault">false</field>
    <!-- Service particular data -->
    <field name="date">20120813</field>
    <field name="contractNumber">610</field>
    <field name="orderNumber">01</field>
  </doc>

我知道你对这个策略有什么看法?如果你知道另一个更适合这个用例?

我可以说我们服务的请求/响应的数据可能很长(比如平均有120行XML),而我们在全球有超过300项服务。我们的服务每天生产80.000请求。最后,我可以说请求/响应中的所有信息对于每个服务的每个操作都具有不同的结构(所有异质数据)。

提前致谢。

1 个答案:

答案 0 :(得分:0)

你只能索引一个XML文件,因此,我建议你有许多solr的集群实例,每个实例对应一个xml文件。