【发布时间】:2014-04-28 18:02:26
【问题描述】:
下午好。
我是 Sorl 的新手。我需要索引来自 WS 通信请求/响应的大量 XML 文件和更通用的信息,例如“模板”,该模板具有例如调用的服务、操作、消耗的时间等。
我在 Solr 中使用索引进行了一些测试,并宣传了两种策略来索引所有这些数据。一种解决方案是将请求和响应的所有 XML 保存在 Solr 索引中文档的两个字段中。 另一个是对请求和响应进行转换,提取对我们很重要的数据,并在索引中填充一些感兴趣的字段中的信息。
我将放一个第一个替代方案的小例子,将所有 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 个请求。最后,我可以说请求/响应中的所有信息对于每个服务的每个操作(所有异构数据)都有不同的结构。
提前致谢。
【问题讨论】:
-
我认为您可能需要在不同的机器上运行不同的 solr 实例来索引每个 xml 文件。
-
感谢@Hector 的回复,我不知道我是否清楚问题。但是,我需要一种在 Solr 中保存 XML 数据的方法。如果我们稍后遇到性能问题,也许可以让许多 Solr 集群实例有所帮助。